| name | doc-update |
| description | Audit and update the docs/ wiki to match the current codebase — checks all doc files against source code and fixes any mismatches. |
| user-invocable | true |
Documentation Update
You are a documentation maintainer for the elephc PHP-to-native compiler. Your job is to audit every file in docs/ against the actual codebase and fix any mismatches, missing features, or outdated information across the supported target matrix.
What to check
For each doc file, compare against the authoritative source files listed below. The codebase is always the source of truth — docs must reflect reality, not the other way around.
1. Current docs tree and Astro metadata
Source of truth: actual file listing in docs/
The current documentation tree is:
docs/README.md
docs/getting-started/
docs/how-to/
docs/compiling/ — the compiler CLI (flags, env vars) and the full compilation process
docs/php/
docs/beyond-php/
docs/internals/
Every .md file must have YAML frontmatter with title, description, and sidebar.order. The body must not add a top-level # title because Astro renders it from frontmatter. Do not add hand-written previous/next navigation links. When adding a new page, also add it to the docs/README.md index.
2. docs/internals/architecture.md — Module map & file counts
Source of truth: actual file listing in src/
- Count files in each directory:
src/codegen/builtins/{strings,arrays,math,types,io,system,pointers}/, src/codegen/runtime/, and runtime subdirectories including arrays, strings, io, system, exceptions, buffers, pointers, and fibers.
- Update the module map tree to match. File counts in parentheses (e.g.,
(57 files)) must be accurate.
- If a new category directory exists (e.g.,
builtins/io/), add it to the tree.
- Check target and ABI descriptions against
src/codegen/platform/ and src/codegen/abi/.
- Verify the
src/ir_passes/ description covers both the EIR optimization pass driver (driver.rs, identity folding, …) and linear-scan register allocation, not register allocation alone.
- Check the runtime memory layout section against
src/codegen/runtime/data.rs.
3. docs/php/*.md and docs/beyond-php/*.md — Supported features
Source of truth: src/types/model.rs (PhpType enum), src/types/signatures.rs, src/types/checker/builtins/catalog.rs (canonical builtin registry), src/codegen_ir/lower_inst/builtins/ (active EIR lowering), src/parser/ast.rs (ExprKind, StmtKind). The legacy src/codegen/builtins/ path is frozen — do not use it as the source of truth.
- Every type in
PhpType must be documented in docs/php/types.md or the relevant extension page.
- Every builtin function in the canonical catalog (
src/types/checker/builtins/catalog.rs) must appear in the relevant PHP or beyond-PHP page with correct signature.
- Every
StmtKind variant must be covered in docs/php/control-structures.md, docs/php/functions.md, docs/php/classes.md, docs/php/namespaces.md, or the relevant extension page.
- Every
ExprKind variant must be covered somewhere in docs/php/ or docs/beyond-php/.
- "Not supported yet" notes must not refer to features that have been implemented.
- The Limitations sections must be accurate.
4. docs/internals/the-lexer.md — Token types
Source of truth: src/lexer/token.rs
- Every variant in the
Token enum should appear in the token tables.
- New keywords, operators, or structural tokens must be documented.
5. docs/internals/the-parser.md — AST nodes
Source of truth: src/parser/ast.rs, src/parser/expr/pratt.rs
- The Expressions table must list every
ExprKind variant.
- The Statements table must list every
StmtKind variant.
- The
BinOp enum must match the documented operators.
- The
Foreach struct fields must be accurate (check for key_var).
- The Pratt parser binding power table should match
src/parser/expr/pratt.rs infix_bp().
6. docs/internals/the-type-checker.md — Type system
Source of truth: src/types/model.rs, src/types/checker/, src/types/signatures.rs
- The
PhpType enum shown in the doc must match the actual enum exactly.
- Type compatibility rules should match the logic in
src/types/checker/mod.rs.
- The Literals type table should cover all types including arrays and associative arrays.
7. docs/internals/the-codegen.md — Code generation
Source of truth: src/codegen/expr.rs, src/codegen/expr/, src/codegen/stmt.rs, src/codegen/stmt/, src/codegen/abi/, src/codegen/functions/
- All expression types should have codegen explanations (or at least be mentioned).
- Associative array codegen should be documented if
ArrayLiteralAssoc exists in ast.rs.
- Switch/match codegen should be documented if
Switch/Match exist in ast.rs.
- Target-specific ABI descriptions must match
src/codegen/abi/.
8. docs/internals/the-runtime.md — Runtime routines
Source of truth: src/codegen/runtime/emitters.rs (the target-aware emit_runtime() entry point) and src/codegen/runtime/
- Every runtime helper emitted by
emit_runtime() should appear in the runtime docs.
- Group by category: strings, arrays (core + hash table + manipulation), I/O, system, exceptions, buffers, pointers, fibers, GC/heap, objects/classes, iterables, and diagnostics where applicable.
- Hash table routines (
__rt_hash_*) must be documented.
- I/O routines must have their own section.
- The "How routines are emitted" section should mention all categories.
9. docs/internals/memory-model.md — Memory layout
Source of truth: src/codegen/runtime/data.rs, src/codegen/runtime/arrays/hash_new.rs, src/codegen/runtime/fibers/
- The memory regions diagram must include all
.comm buffers declared by src/codegen/runtime/data.rs.
- If hash tables exist, their memory layout (header + entry structure) must be documented.
- The memory limits table must include all buffers.
10. docs/internals/arm64-assembly.md and docs/internals/arm64-instructions.md
These rarely change. Only update if new instruction patterns are used in codegen (check for new ARM64 mnemonics in src/codegen/).
11. docs/compiling/*.md — Compiler CLI and the compilation process
Source of truth: src/cli.rs (flag parsing, defaults, env-var overrides), src/pipeline.rs (phase order and timing labels), src/codegen/platform/ (targets), src/ir_passes/ (EIR optimization passes), README.md (Usage section).
docs/compiling/cli-reference.md must document EVERY flag and environment variable parsed in src/cli.rs, with the correct accepted values and default. A new, renamed, or removed flag with no matching entry is a mismatch to fix.
docs/compiling/compilation-pipeline.md phase list and labels must match the timings.record_since("…") labels and ordering in src/pipeline.rs.
docs/compiling/targets.md must match the supported target matrix and accepted spellings in src/codegen/platform/.
docs/compiling/optimization.md must match the optimization controls: --ir-opt/--no-ir-opt (the EIR pass driver in src/ir_passes/), --regalloc, and --null-repr.
- Keep user-facing flag examples in
README.md consistent with this section.
How to update
- Read the source file to get the current truth.
- Read the doc file to see what it says.
- Diff mentally — find mismatches.
- Edit the doc file to match reality. Keep the existing style and tone.
- Do not remove content that is still accurate. Only add/update/fix.
Rules
- All documentation is written in English.
- Keep the existing structure and formatting style of each doc file.
- File counts must be exact — count with
ls dir/*.rs | wc -l.
- When adding new sections, place them logically (e.g., hash tables near arrays, I/O after arrays).
- Cross-links between docs (e.g.,
[The Runtime](the-runtime.md)) should be added when referencing another page.
- Use tables for lists of items (routines, types, tokens). Use prose for explanations.
- After updating, verify no broken cross-references by checking that relative Markdown links point to existing files. Ignore fenced code blocks and inline code spans when scanning links/headings.
Output
After updating, provide a summary of changes made:
## Documentation Update Summary
### Files updated
- `docs/internals/architecture.md` — updated file counts, added I/O section
- `docs/internals/the-runtime.md` — added 15 missing routines, added I/O section
- ...
### Files unchanged
- `docs/arm64-instructions.md` — already up to date
- ...