Analyze pass against tree at f596743. All 6 formulate-time questions
resolved without structural changes; pillar shapes intact.
A1. renderer.lua surface clean — assistant_delta/flush accumulate via
stream_buf; fence-aware filter slots in between chunk receipt and
emit without touching anything else.
A2. executor.exec via pty.spawn already handles git diff / find;
cwd-aware (inherits from libc.chdir). No new IO model.
A3. context composition order locked: base + [background] + [earlier
summary] + NORRIS. [project] inserts between [background] and
[earlier summary]; Norris-suppression guard inherited.
A4. Q-H1 RESOLVED: tmpfile roundtrip for tree-sitter popen3
(io.popen("w") + redirect stdout to tmp file; io.open reads back).
Avoids ARGMAX + shell-escape complexity. Cost ~one syscall per
code block.
A5. Q-D1 RESOLVED: no confirm gate on :diff. git diff is read-only;
matches :history / :sessions / :safety check.
A6. Q-D2 RESOLVED: tiered @<token> resolution — file lookup first,
then ref-range retry when path fails AND token contains "..".
@origin/main..feature works naturally; @../sibling.txt unaffected.
A7. Q-H2 RESOLVED: highlighter is assistant-output only in v1.
@-mention echo via readline is a different code path; deferred
to v2 (added to §8 out-of-scope).
A8. Q-T1 RESOLVED: project tree captured at scan time, not auto-
refreshed on cd. v1 verb is :tree refresh; cd-intercept auto-
refresh deferred to v2.
A9. Q-T2 RESOLVED: .gitignore via `git ls-files --exclude-standard`
in repos; find fallback outside. Custom globs deferred to v2.
A10. expand_mentions punct-peel doesn't strip "/", so HEAD~1..HEAD,
peels comma cleanly and the diff retry catches the cleaned token.
A11. Auto-injection ordering: memory load → tree scan → first ask_ai.
Composition reads memory facts before file tree.
A12. [project] Norris-suppressed (parity with R-C1/R-C4).
§3 module-changes table: context.lua row updated (project string +
compose_project + ordering note + Norris suppression). §4 highlighter
code sample replaced with the tmpfile-roundtrip resolved form. §5
@-mention section rewritten as tiered-resolution with worked examples.
§8 out-of-scope gained three v2-polish items (echo highlight, cd-
intercept auto-refresh, custom globs) so they're tracked. §10 Open
Questions table now shows all 6 Qs with their resolutions inline.
§9 Risks row for @-mention collision updated to point at A6.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Phase 6 formulate manifest. Three pillars per PHASE0 §11 row 6:
1. Tree-sitter syntax highlighting hooks
External `tree-sitter` CLI when present, no-op otherwise.
Honors PHASE0 §3 (no compiled extensions). Toggleable
at runtime; off by default so existing UX is unchanged.
2. Diff-aware code injection
:diff [args] meta + @<ref1>..<ref2> @-mention extension.
Shells out to `git diff`; output flows through the existing
exec-output context channel.
3. Project-level file-tree context
:tree meta + optional cfg.project.auto_tree startup inject.
git ls-files in a repo, find fallback otherwise. Composed
into the system prompt as a new [project] block between
[background] and [earlier summary]. Suppressed under Norris
(R-C1 / R-C4 parity).
Module changes: renderer.lua (fence-aware highlight filter), context.lua
(compose_project), repl.lua (3 new metas, 3 new helpers, expand_mentions
extension). No new module files in v1.
Doc covers: scope + done-when criteria, tech decisions table, module
changes table, per-pillar deep dive with example code, UX surface
summary, out-of-scope list, risks, and 6 open questions to resolve
in analyze (Q-H1/Q-H2 highlighter, Q-D1/Q-D2 diff, Q-T1/Q-T2 tree).
Scope confirmed via AskUserQuestion: all three subsurfaces in scope;
tree-sitter approach is external CLI w/ no-op fallback.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>