Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1208 commits
Select commit Hold shift + click to select a range
4f6f308
Cover eval AOT by-ref fatal writeback
nahime0 Jun 30, 2026
9b02836
Support eval closure callables
nahime0 Jun 30, 2026
b757e4c
Support eval closure reflection
nahime0 Jun 30, 2026
0fe3db7
Track static eval closure metadata
nahime0 Jun 30, 2026
72d88ea
Test eval callable by-ref bridge
nahime0 Jun 30, 2026
45629ed
Support eval Closure objects
nahime0 Jun 30, 2026
4dc9ae9
Support eval first-class Closure objects
nahime0 Jun 30, 2026
eb21bc7
Propagate eval constructor throws
nahime0 Jun 30, 2026
a7a168a
Support eval Closure::fromCallable
nahime0 Jun 30, 2026
a129191
Support eval Closure::call
nahime0 Jun 30, 2026
71ee161
Test eval constructor by-ref lvalue targets
nahime0 Jun 30, 2026
4721014
Test eval ref-like builtin call arrays
nahime0 Jun 30, 2026
c1d85e6
Support eval Closure binding
nahime0 Jun 30, 2026
999463b
Validate eval callable targets
nahime0 Jun 30, 2026
13f4156
Validate eval first-class callable targets
nahime0 Jun 30, 2026
1a3a542
Support eval is_callable callable names
nahime0 Jun 30, 2026
dd9f99e
Support eval scoped special callable arrays
nahime0 Jun 30, 2026
cd9511b
Test eval namespaced first-class callable fallback
nahime0 Jun 30, 2026
1ee705c
Test eval imported first-class callables
nahime0 Jun 30, 2026
416e333
Test eval leading slash callable arrays
nahime0 Jun 30, 2026
5070f91
Test eval leading slash string callables
nahime0 Jun 30, 2026
8f3426a
Test eval declared by-ref callables
nahime0 Jun 30, 2026
2b60490
Test eval declared by-ref constructors
nahime0 Jun 30, 2026
d03691a
Test eval ref-like builtin closures
nahime0 Jun 30, 2026
17ea29a
Clean up eval call_user_func_array args
nahime0 Jun 30, 2026
cb3dc97
Clean up eval call_user_func_array callback temps
nahime0 Jun 30, 2026
d494ef6
Clean up eval call_user_func callback temps
nahime0 Jun 30, 2026
87cd772
Clean up eval array callable index temps
nahime0 Jun 30, 2026
c393ca5
Recognize eval date alias probes
nahime0 Jun 30, 2026
638117d
Execute eval date procedural aliases
nahime0 Jun 30, 2026
57d1c29
Complete eval timezone alias dispatch
nahime0 Jun 30, 2026
0ee2258
Fix eval method throw bridge writeback
nahime0 Jun 30, 2026
06aa10e
Fix eval bridge arg-prep fatal cleanup
nahime0 Jun 30, 2026
4131c5b
Fix eval dynamic callable bridge
nahime0 Jun 30, 2026
bbf9b55
Preserve eval dynamic callable ref slots
nahime0 Jun 30, 2026
8883e14
Fix eval callable ref high word on x86_64
nahime0 Jun 30, 2026
f9fad15
Cover eval ref-like builtin Closure aliases
nahime0 Jun 30, 2026
bf47293
Support eval Closure invoke callables
nahime0 Jun 30, 2026
645d82f
Resolve eval special string callables
nahime0 Jun 30, 2026
284c9a8
Honor eval Closure bind scope
nahime0 Jun 30, 2026
941cfaf
Cover eval first-class special refs
nahime0 Jun 30, 2026
59b2d96
Cover eval callable fatal cleanup forms
nahime0 Jun 30, 2026
34a828d
Cover eval builtin callable fatal cleanup
nahime0 Jun 30, 2026
7701263
Cover eval special callable refs
nahime0 Jun 30, 2026
b8f64df
Preserve eval Closure null bind scope
nahime0 Jun 30, 2026
8fc24b2
Cover eval Closure special string callables
nahime0 Jun 30, 2026
83299d8
Cover eval static callable fatal cleanup
nahime0 Jun 30, 2026
13b9bca
Persist eval special static string closures
nahime0 Jun 30, 2026
b1b6221
Cover eval special array closures after scope
nahime0 Jun 30, 2026
2ee0262
Cover eval persistent instance special closures
nahime0 Jun 30, 2026
a7088aa
Cover eval named constructor ref bridge
nahime0 Jun 30, 2026
8dda9d1
Cover eval named callable ref bridge
nahime0 Jun 30, 2026
381b470
Align eval Closure::call value args
nahime0 Jul 1, 2026
1b039a0
Document complete eval builtin surface
nahime0 Jul 1, 2026
61ca32b
Align eval call_user_func closure refs
nahime0 Jul 1, 2026
887da40
Align eval call_user_func_array refs
nahime0 Jul 1, 2026
c5ff85b
Align eval array reference reads
nahime0 Jul 1, 2026
be89747
Cover eval variadic reference callables
nahime0 Jul 1, 2026
65c4986
Document eval AOT variadic ref limitation
nahime0 Jul 1, 2026
4361faa
Cover eval string callable ref builtins
nahime0 Jul 1, 2026
209004b
Support by-ref variadic eval parity
nahime0 Jul 1, 2026
ed327a1
test: cover eval constructor refcounted by-ref writeback
nahime0 Jul 1, 2026
6842f1f
Support eval AOT by-ref variadic callables
nahime0 Jul 1, 2026
755d989
Handle AOT function throws in eval callables
nahime0 Jul 1, 2026
40f3a4e
Cover eval call_user_func AOT callable by-value args
nahime0 Jul 1, 2026
6fcde58
Cover eval call_user_func ref-like builtin closures
nahime0 Jul 1, 2026
7123a4a
Cover eval call_user_func_array non-ref builtin closures
nahime0 Jul 1, 2026
f76a186
Cover eval call_user_func_array named AOT refs
nahime0 Jul 1, 2026
c31c59f
Cover eval-declared call_user_func_array named refs
nahime0 Jul 1, 2026
63e1008
Cover eval static Closure bind fromCallable
nahime0 Jul 1, 2026
479f79c
Align eval Closure bind function callables
nahime0 Jul 1, 2026
5832d68
Reject eval Closure function scope rebinding
nahime0 Jul 1, 2026
98a7e13
Retain eval Closure reflection metadata
nahime0 Jul 1, 2026
d3c6561
Align eval ReflectionClass constructor refs
nahime0 Jul 1, 2026
8d7a049
Align eval Reflection invoke refs
nahime0 Jul 1, 2026
8a4a60a
Align eval ReflectionClass newInstanceArgs refs
nahime0 Jul 1, 2026
9412fd1
Align eval Closure bind inheritance
nahime0 Jul 1, 2026
2c8b43c
Cover first-class Closure bind inheritance
nahime0 Jul 1, 2026
2f8589f
Support eval ref-like builtin callable bridge
nahime0 Jul 1, 2026
eb02d7b
Fix eval AOT static callable fallback
nahime0 Jul 1, 2026
e5f5306
Mark literal eval calls for AOT fallback
nahime0 Jul 5, 2026
16f61af
Cache parsed eval fragments
nahime0 Jul 5, 2026
207182c
Plan magician performance follow-ups
nahime0 Jul 5, 2026
dd0fad9
docs(eval): plan literal eval AOT completion
nahime0 Jul 6, 2026
396277f
feat(eval): add literal eval AOT scope path
nahime0 Jul 6, 2026
6b0e0b0
bench(eval): add magician benchmark suite
nahime0 Jul 6, 2026
cd02694
feat(eval): support static method callback AOT
nahime0 Jul 6, 2026
99c3ae1
feat(eval): accept class constant static callbacks
nahime0 Jul 6, 2026
687a1a9
feat(eval): support first-class static callbacks in eval AOT
nahime0 Jul 6, 2026
5e45df8
test(eval): cover first-class call_user_func_array AOT
nahime0 Jul 6, 2026
a8cc771
docs(eval): record prime-loop target checks
nahime0 Jul 6, 2026
127202e
docs(eval): record prime-loop benchmark result
nahime0 Jul 6, 2026
cfcd7d9
docs(eval): close eval AOT completion plan
nahime0 Jul 6, 2026
4b7bd09
fix(eval): use split runtime feature flags
nahime0 Jul 6, 2026
8c94862
Fix eval branch after main rebase
nahime0 Jul 7, 2026
0b64abb
docs(eval): consolidate eval and magician plans
nahime0 Jul 7, 2026
a56652d
fix: remove warning-only dead code
nahime0 Jul 7, 2026
04aadbf
docs: add builtin docs update skill
nahime0 Jul 7, 2026
5717c15
docs: keep plans in english
nahime0 Jul 7, 2026
2817c22
feat(magician): add declarative eval builtin registry
nahime0 Jul 7, 2026
ef16715
refactor(magician): migrate type builtins to eval registry
nahime0 Jul 7, 2026
c8cb4c5
refactor(magician): migrate math builtins to eval registry
nahime0 Jul 7, 2026
d12822b
refactor(magician): migrate simple string builtins to eval registry
nahime0 Jul 7, 2026
ca3693a
refactor(magician): migrate stateless string builtins to eval registry
nahime0 Jul 7, 2026
a4830e0
refactor(magician): migrate remaining simple string helpers
nahime0 Jul 7, 2026
cb92cb2
refactor(magician): migrate simple array builtins to eval registry
nahime0 Jul 7, 2026
a873dd7
refactor(magician): migrate json builtins to eval registry
nahime0 Jul 7, 2026
13f8388
refactor(magician): migrate time builtins to eval registry
nahime0 Jul 7, 2026
7e079f1
refactor(magician): migrate regex builtins to eval registry
nahime0 Jul 7, 2026
1d1c186
refactor(magician): migrate path builtins to eval registry
nahime0 Jul 7, 2026
b08f326
refactor(magician): migrate filesystem query builtins
nahime0 Jul 7, 2026
49dab2d
refactor(magician): migrate filesystem stat builtins
nahime0 Jul 7, 2026
2b10516
refactor(magician): migrate filesystem content builtins
nahime0 Jul 7, 2026
469c14e
refactor(magician): migrate filesystem path mutation builtins
nahime0 Jul 7, 2026
a8e8141
refactor(magician): migrate filesystem process builtins
nahime0 Jul 7, 2026
c37254c
refactor(magician): migrate directory builtins
nahime0 Jul 7, 2026
40b2be5
refactor(magician): migrate stream query builtins
nahime0 Jul 8, 2026
0c4b12e
refactor(magician): migrate stream setting builtins
nahime0 Jul 8, 2026
d8b1fb9
refactor(magician): migrate stream content builtins
nahime0 Jul 8, 2026
c83964f
refactor(magician): migrate unary stream builtins
nahime0 Jul 8, 2026
d91f4e6
refactor(magician): migrate hash and gzip builtins
nahime0 Jul 8, 2026
7e9e1ca
refactor(magician): migrate split join string builtins
nahime0 Jul 8, 2026
f2ca6a1
refactor(magician): migrate printf formatting builtins
nahime0 Jul 8, 2026
d0f0468
refactor(magician): migrate response header builtins
nahime0 Jul 8, 2026
d403e3d
refactor(magician): migrate random builtins
nahime0 Jul 8, 2026
eb2eac0
refactor(magician): migrate network env builtins
nahime0 Jul 8, 2026
f252bec
refactor(magician): migrate core callable builtins
nahime0 Jul 8, 2026
ec8c7f8
refactor(magician): migrate settype builtin
nahime0 Jul 8, 2026
cfeca6c
refactor(magician): migrate debug output builtins
nahime0 Jul 8, 2026
56f0011
refactor(magician): migrate non-mutating array builtins
nahime0 Jul 8, 2026
1f55f29
refactor(magician): migrate mutating array builtins
nahime0 Jul 8, 2026
99cc80f
refactor(magician): migrate filesystem builtins
nahime0 Jul 8, 2026
e04d200
refactor(magician): migrate symbol builtins
nahime0 Jul 8, 2026
5648740
refactor(magician): migrate raw memory builtins
nahime0 Jul 8, 2026
9cd06eb
docs(plans): mark magician phase 2 complete
nahime0 Jul 8, 2026
45e21e4
refactor(magician): route direct builtins through registry
nahime0 Jul 8, 2026
a2032ee
refactor(magician): split filesystem stream helpers
nahime0 Jul 8, 2026
14c7c22
refactor(magician): split oop introspection helpers
nahime0 Jul 8, 2026
a112ba7
refactor(magician): finish builtin structure cleanup
nahime0 Jul 8, 2026
2199a53
refactor(magician): co-locate array projection builtins
nahime0 Jul 8, 2026
0e62693
refactor(magician): co-locate type builtin implementations
nahime0 Jul 8, 2026
5e56199
refactor(magician): co-locate math builtin implementations
nahime0 Jul 8, 2026
ff46128
refactor(magician): co-locate json builtin wrappers
nahime0 Jul 8, 2026
5d7d5c2
refactor(magician): co-locate formatting builtins
nahime0 Jul 8, 2026
06dfcd8
refactor(magician): co-locate regex builtins
nahime0 Jul 8, 2026
1e39fb4
refactor(magician): co-locate raw memory builtins
nahime0 Jul 8, 2026
c6b3a5c
refactor(magician): co-locate core builtin implementations
nahime0 Jul 8, 2026
f548438
refactor(magician): co-locate time builtin implementations
nahime0 Jul 8, 2026
fd65105
refactor(magician): co-locate network env builtins
nahime0 Jul 8, 2026
ae1ea09
refactor(magician): co-locate string builtin implementations
nahime0 Jul 8, 2026
f8bfce1
refactor(magician): co-locate filesystem builtin declarations
nahime0 Jul 8, 2026
4d7ff0f
refactor(magician): co-locate symbol builtin declarations
nahime0 Jul 8, 2026
614ed7b
refactor(magician): co-locate array builtin adapters
nahime0 Jul 8, 2026
ec207fd
refactor(magician): move array builtin implementations home
nahime0 Jul 8, 2026
7123e66
refactor(magician): move filesystem path builtin implementations home
nahime0 Jul 8, 2026
af7708e
refactor(magician): move filesystem content builtin implementations home
nahime0 Jul 8, 2026
e73b553
refactor(magician): move filesystem ops builtin implementations home
nahime0 Jul 8, 2026
5b66cea
refactor(magician): move directory builtin implementations home
nahime0 Jul 8, 2026
5395476
refactor(magician): move process pipe builtin implementations home
nahime0 Jul 8, 2026
05a2433
refactor(magician): move file metadata builtin implementations home
nahime0 Jul 8, 2026
fc25d45
refactor(magician): move stream opening builtin implementations home
nahime0 Jul 8, 2026
53d272e
refactor(magician): move core stream builtin implementations home
nahime0 Jul 8, 2026
f79879f
refactor(magician): move stream csv and flock builtins home
nahime0 Jul 8, 2026
0d22dd2
refactor(magician): move stream settings builtin implementations home
nahime0 Jul 8, 2026
8c64275
refactor(magician): move stream context builtins home
nahime0 Jul 8, 2026
1c94630
refactor(magician): move stream extension builtins home
nahime0 Jul 8, 2026
a8bb963
refactor(magician): move stream socket builtins home
nahime0 Jul 8, 2026
7c27d4e
refactor(magician): inline remaining filesystem fallback builtins
nahime0 Jul 8, 2026
a815f51
refactor(magician): remove symbol builtin impl dispatcher
nahime0 Jul 8, 2026
cae99e3
refactor(magician): move language construct builtins home
nahime0 Jul 8, 2026
310b613
refactor(magician): move function probe builtin home
nahime0 Jul 8, 2026
1244312
refactor(magician): move class relation builtins home
nahime0 Jul 8, 2026
1d18daf
refactor(magician): move class name builtins home
nahime0 Jul 8, 2026
8a2c8b7
refactor(magician): move spl autoload builtins home
nahime0 Jul 8, 2026
619e6ba
refactor(magician): move scalar introspection builtins home
nahime0 Jul 8, 2026
beffb48
refactor(magician): move is_callable implementation home
nahime0 Jul 8, 2026
4703342
refactor(magician): move class relation metadata builtins home
nahime0 Jul 8, 2026
95987dc
refactor(magician): move class attribute builtins home
nahime0 Jul 8, 2026
dd3764d
refactor(magician): move member existence builtins home
nahime0 Jul 8, 2026
7396664
refactor(magician): move get_class_methods builtin home
nahime0 Jul 8, 2026
4fa28ba
refactor(magician): move get_class_vars builtin home
nahime0 Jul 8, 2026
d251777
refactor(magician): move get_object_vars builtin home
nahime0 Jul 8, 2026
229fb6b
refactor(magician): inline class metadata helper module
nahime0 Jul 8, 2026
da6a3a9
refactor(magician): tidy spl_classes builtin leaf
nahime0 Jul 8, 2026
37625d4
docs(plans): mark magician builtin phase 4 complete
nahime0 Jul 8, 2026
33ee218
refactor(magician): keep builtin dispatch in leaf files
nahime0 Jul 8, 2026
07fcbf5
docs(plans): detail dynamic eval specialization work
nahime0 Jul 8, 2026
4f3aa30
fix: adapt eval branch after main rebase
nahime0 Jul 9, 2026
cea43be
fix: repair nextest archive build
nahime0 Jul 9, 2026
9ea49f9
fix: restore CI attribute and image prelude tests
nahime0 Jul 9, 2026
ba51d16
fix(eval): restore AOT eval CI cases
nahime0 Jul 9, 2026
a00e68d
fix(optimizer): invalidate eval and by-ref variadics
nahime0 Jul 9, 2026
2934f7b
fix(callables): handle boxed sort callbacks
nahime0 Jul 9, 2026
6b0947a
fix(reflection): repair function metadata ownership
nahime0 Jul 9, 2026
88db3ac
fix(codegen): guard null gap cells in mixed array ref-cell reads
nahime0 Jul 10, 2026
bb6049b
fix(reflection): support isBuiltin on composite reflection types
nahime0 Jul 10, 2026
8ec205f
fix(checker): enforce eval() arity in the builtin fast-path
nahime0 Jul 10, 2026
c1d376f
feat(magician): align builtin parity with main
nahime0 Jul 10, 2026
5d15eca
fix(eval): realign literal-eval barriers, scope runtime, and global sync
nahime0 Jul 10, 2026
ee3a015
feat(parser): parse legacy array() as an array literal
nahime0 Jul 10, 2026
9d6314a
fix(ir): keep declared_params faithful to source type hints
nahime0 Jul 10, 2026
599f84c
test: refresh eval bridge fixtures and corpus timeout
nahime0 Jul 10, 2026
8474547
Revert "fix(ir): keep declared_params faithful to source type hints"
nahime0 Jul 10, 2026
1584fa4
fix(reflection): derive hasType from source type hints
nahime0 Jul 10, 2026
99c2915
fix(eval): widen unspecialized __call args to the boxed Mixed ABI
nahime0 Jul 10, 2026
a7c19d1
fix(ir): keep raw ABI for stream wrapper and filter contract methods
nahime0 Jul 10, 2026
61a9f80
fix(reflection): restore invokeArgs (object, args) parameters
nahime0 Jul 10, 2026
e8e7598
fix(attributes): fold Foo::class args and construct with named arguments
nahime0 Jul 10, 2026
3cb1db6
fix(codegen): unbox Mixed store values into object-typed properties
nahime0 Jul 10, 2026
b5b4162
fix(checker): accept a dynamic autoload flag in class_exists family
nahime0 Jul 10, 2026
b3fccd2
fix(codegen): stop embedding the source path in native-only programs
nahime0 Jul 10, 2026
be1a85f
fix(eval): overwrite native locals from direct AOT eval stores
nahime0 Jul 10, 2026
d88a3c5
docs(plans): add dual-frontend grammar governance for eval
nahime0 Jul 10, 2026
3b6f4b4
fix(dispatch): magic-call args contract, reflection hasType, method n…
nahime0 Jul 10, 2026
f462721
fix(eval): route constant probes through eval registry after barrier-…
nahime0 Jul 10, 2026
a8793e1
fix(ir_lower): drop count()'s statically-default mode argument
nahime0 Jul 10, 2026
e123d91
fix(parser): follow PHP 8.3 auto-key semantics for explicit array keys
nahime0 Jul 10, 2026
258938d
fix(ir): keep directly-returned values of heap-typed functions unfolded
nahime0 Jul 10, 2026
0268ebf
feat(codegen): lower array_key_exists for boxed Mixed containers
nahime0 Jul 10, 2026
d241ef2
fix(eval): reload container locals from scope cells after barrier sync
nahime0 Jul 10, 2026
91b3bad
feat(codegen): dispatch is_array/is_integer as runtime string callbacks
nahime0 Jul 10, 2026
5cbb321
fix(reflection): accept indexed argument lists in newInstanceArgs
nahime0 Jul 10, 2026
092bd6d
fix(codegen): box nested attribute arg arrays with the assoc tag
nahime0 Jul 10, 2026
e884b43
fix(builtins): keep by-ref params undeclared in first-class callable …
nahime0 Jul 10, 2026
71d8913
test(eval): assert full print_r/var_dump output shapes
nahime0 Jul 10, 2026
0d36566
fix(eval): widen scalar slots for type-changing direct eval stores
nahime0 Jul 10, 2026
a03ffe5
fix(magician): dispatch calling scope's private method over child ove…
nahime0 Jul 10, 2026
794b4a8
fix(eval): handle PhpType::False and TypeExpr::False from main
nahime0 Jul 10, 2026
12ce395
test: align stale expectations with branch semantics
nahime0 Jul 10, 2026
9a87868
docs: regenerate builtin pages after rebase onto 0.26.1
nahime0 Jul 10, 2026
f066f22
feat(magician): expose builtin docs metadata
nahime0 Jul 11, 2026
ed1b810
feat(docs): emit dual AOT/eval support from the builtins exporter
nahime0 Jul 11, 2026
c74c5d9
feat(docs): render the AOT/eval support matrix
nahime0 Jul 11, 2026
a6e2784
docs: regenerate builtin pages with the eval support matrix
nahime0 Jul 11, 2026
92378b5
fix(ci): address eval regressions and slow tests
nahime0 Jul 11, 2026
3cd115b
fix(eval): preserve invokable object callback access
nahime0 Jul 12, 2026
4d89bcd
fix(ci): trust archived bridge staticlibs in shards
nahime0 Jul 12, 2026
0bc7fc8
fix(ci): shard eval codegen tests separately
nahime0 Jul 12, 2026
17b31aa
fix(ci): resolve archived bridge staticlibs
nahime0 Jul 12, 2026
6032afb
fix(codegen): gate reflection lowering by reachability
nahime0 Jul 12, 2026
aa46e3b
fix(codegen): retain reflection metadata for eval scope
nahime0 Jul 12, 2026
8eca4cc
test(eval): split reserved class-like name cases
nahime0 Jul 12, 2026
1392f2f
refactor(magician): split context and eval IR modules
nahime0 Jul 13, 2026
b843ffe
refactor(magician): split FFI implementation and tests
nahime0 Jul 13, 2026
50d11cd
refactor(magician): split interpreter dispatch modules
nahime0 Jul 13, 2026
6ba1f30
refactor(magician): split runtime operation implementations
nahime0 Jul 13, 2026
9027443
refactor(magician): split interpreter test suites
nahime0 Jul 13, 2026
c90e047
refactor(magician): split parser modules and tests
nahime0 Jul 13, 2026
8b5cea3
refactor(magician): split scope and stream resources
nahime0 Jul 13, 2026
d26e03a
docs: document experimental eval support [skip ci]
nahime0 Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
51 changes: 51 additions & 0 deletions .claude/skills/update-builtin-docs/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
name: update-builtin-docs
description: Regenerate and audit Elephc's generated builtin documentation from the builtin! and eval_builtin! registries. Use when a change touches src/builtins, crates/elephc-magician/src/interpreter/builtins, builtin signatures, builtin lowering hooks, docs/php/builtins, docs/internals/builtins, scripts/docs/builtin_registry.json, or before opening a PR that changes PHP builtins.
---

# Update Builtin Docs

Run the same generated-docs workflow enforced by the `builtins-docs-sync` CI job.
Use the repo root as the working directory.

## Workflow

1. Build the exporter that reads the single-source `builtin!` registry and the
eval interpreter's `eval_builtin!` registry (an example target, so it can
link the elephc-magician dev-dependency):

```bash
cargo build --example gen_builtins
```

2. Regenerate the JSON registry and Markdown pages:

```bash
python3 scripts/docs/extract_builtins.py --render --force
```

3. Run the docs audits used by CI:

```bash
python3 scripts/docs/audit_builtins.py
python3 scripts/docs/elephc_builtins/validate_site_compat.py
```

4. Inspect generated changes before reporting or committing:

```bash
git status --short -- docs/php/builtins.md docs/php/builtins docs/internals/builtins scripts/docs/builtin_registry.json
git diff --check
```

## Rules

- Treat `src/builtins/` (`builtin!`) and `crates/elephc-magician/src/interpreter/builtins/` (`eval_builtin!`) as the source of truth for the AOT and eval support dimensions respectively.
- Do not hand-edit generated builtin pages to fix drift; fix the registry, lowering metadata, or `scripts/docs/elephc_builtins/` generator inputs, then rerun the workflow.
- If the user asked only for a sync check, also run:

```bash
git diff --exit-code -- docs/php/builtins.md docs/php/builtins docs/internals/builtins scripts/docs/builtin_registry.json
```

- If generated files changed, include those files in the same PR as the builtin change unless the user explicitly wants a separate docs-only follow-up.
4 changes: 4 additions & 0 deletions .claude/skills/update-builtin-docs/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Update Builtin Docs"
short_description: "Regenerate generated builtin docs"
default_prompt: "Update the generated builtin documentation and run the CI-equivalent audits."
48 changes: 48 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ relative-to = "target"
path = "debug/libelephc_image.a"
relative-to = "target"
[[profile.ci.archive.include]]
path = "debug/libelephc_magician.a"
relative-to = "target"
[[profile.ci.archive.include]]
path = "debug/libelephc_web.a"
relative-to = "target"

Expand All @@ -46,3 +49,48 @@ slow-timeout = { period = "180s", terminate-after = 1 }
[[profile.ci.overrides]]
filter = 'test(parity_function_first_class_callable_dispatch)'
slow-timeout = { period = "180s", terminate-after = 1 }

# `lowers_examples_corpus` type-checks and lowers every program under examples/;
# ~40s alone and past the global 60s cap on loaded runners.
[[profile.default.overrides]]
filter = 'test(lowers_examples_corpus)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(lowers_examples_corpus)'
slow-timeout = { period = "180s", terminate-after = 1 }

# These eval/codegen regression tests intentionally exercise several complete
# compile-link-run programs in one test. They exceed the 60s global guard on
# one or more supported runners without being hung.
[[profile.default.overrides]]
filter = 'test(ir_backend_handles_scalar_builtins)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(ir_backend_handles_scalar_builtins)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.default.overrides]]
filter = 'test(test_eval_rejects_invalid_property_and_parameter_type_atoms)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(test_eval_rejects_invalid_property_and_parameter_type_atoms)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.default.overrides]]
filter = 'test(test_eval_declared_inherited_property_redeclaration_contracts)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(test_eval_declared_inherited_property_redeclaration_contracts)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.default.overrides]]
filter = 'test(test_eval_aot_callable_named_ref_arg_prep_fatal_cleans_up_stack)'
slow-timeout = { period = "180s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(test_eval_aot_callable_named_ref_arg_prep_fatal_cleans_up_stack)'
slow-timeout = { period = "180s", terminate-after = 1 }
Loading