gm-copilot-cli 2.0.1079 → 2.0.1080
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/copilot-profile.md +1 -1
- package/index.html +1 -1
- package/manifest.yml +1 -1
- package/package.json +1 -1
- package/skills/gm/SKILL.md +11 -10
- package/skills/gm-complete/SKILL.md +23 -10
- package/skills/gm-emit/SKILL.md +25 -10
- package/skills/gm-execute/SKILL.md +25 -10
- package/skills/gm-skill/SKILL.md +28 -6
- package/skills/planning/SKILL.md +30 -10
- package/skills/update-docs/SKILL.md +35 -10
- package/tools.json +1 -1
package/copilot-profile.md
CHANGED
package/index.html
CHANGED
|
@@ -74,7 +74,7 @@ body { display: flex; flex-direction: column; min-height: 100vh; }
|
|
|
74
74
|
<section>
|
|
75
75
|
<div class="gm-section-label"><span class="slash">//</span>status</div>
|
|
76
76
|
<div class="panel">
|
|
77
|
-
<div class="panel-head"><span>release · v2.0.
|
|
77
|
+
<div class="panel-head"><span>release · v2.0.1080</span><span>probably emerging</span></div>
|
|
78
78
|
<div class="panel-body">
|
|
79
79
|
<div class="row">
|
|
80
80
|
<span class="code"><span style="color:var(--panel-accent)">●</span></span>
|
package/manifest.yml
CHANGED
package/package.json
CHANGED
package/skills/gm/SKILL.md
CHANGED
|
@@ -5,19 +5,20 @@ allowed-tools: Skill, Read, Write
|
|
|
5
5
|
end-to-end: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# gm — ORCHESTRATOR
|
|
8
|
+
# gm — ORCHESTRATOR
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The user's request is the authorization. The PRD is the receipt. Once the user has spoken, the chain runs to COMPLETE without re-asking, without permission gates between phases, without narrating each step as if it were a deliverable. Re-asking "want me to do X?" after the user said "do X" is forced closure dressed as deference.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
- `phase-status` — read current FSM state
|
|
14
|
-
- `transition` — advance phase
|
|
15
|
-
- `mutable-resolve` — mark mutable witnessed (auto-fires memorize)
|
|
16
|
-
- `memorize-fire` — explicit memorize dispatch
|
|
17
|
-
- Plus existing: `recall`, `codesearch`, `memorize`, `health`, all language stems
|
|
12
|
+
When scope exceeds reach, the response is a maximal cover, not a single slice with the rest deferred. Distributed refusal is the same failure dressed as triage. Pick the wider read, declare the read in one line so the user can interrupt mid-chain, execute.
|
|
18
13
|
|
|
19
|
-
The
|
|
14
|
+
The skill chain is one continuous motion: PLAN → EXECUTE → EMIT → VERIFY → UPDATE-DOCS. No stop between phases. No approval gates. No summarizing-as-completion. The next skill fires the moment the current skill's transition is named. A skill that ends without invoking its successor has stalled the chain.
|
|
15
|
+
|
|
16
|
+
## Dispatch
|
|
17
|
+
|
|
18
|
+
Every operation routes through the spool. Write `.gm/exec-spool/in/<verb>/<N>.txt` with the body. Read `.gm/exec-spool/out/<N>.json`. The orchestrator owns FSM state; the skill reads `nextSkill` and dispatches.
|
|
19
|
+
|
|
20
|
+
Verbs available here: `phase-status`, `transition`, `mutable-resolve` (auto-fires memorize), `memorize-fire`, plus `recall`, `codesearch`, `memorize`, `health`, all language stems.
|
|
20
21
|
|
|
21
22
|
## Transition
|
|
22
23
|
|
|
23
|
-
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately. End of skill.
|
|
24
|
+
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately. End of skill body — no trailing narration, no "I will now". The invocation IS the transition.
|
|
@@ -4,19 +4,32 @@ description: VERIFY and COMPLETE phase. End-to-end system verification and git e
|
|
|
4
4
|
allowed-tools: Skill, Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# gm-complete — VERIFY
|
|
7
|
+
# gm-complete — VERIFY
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
COMPLETE is earned, not declared. Three preconditions: git clean, pushed to remote, CI green. Any one missing means the phase has not concluded.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- `phase-status` — read current FSM state
|
|
13
|
-
- `transition` — advance phase
|
|
14
|
-
- `mutable-resolve` — mark mutable witnessed (auto-fires memorize)
|
|
15
|
-
- `memorize-fire` — explicit memorize dispatch
|
|
16
|
-
- Plus existing: `recall`, `codesearch`, `memorize`, `health`, all language stems
|
|
11
|
+
## CI Is The Build
|
|
17
12
|
|
|
18
|
-
|
|
13
|
+
For Rust crates (rs-exec, rs-codeinsight, rs-search, rs-learn, rs-plugkit) and the gm publish chain, `git push` triggers the build matrix across six target platforms. `cargo build` and `cargo test` are not run locally — a local build covers exactly one platform and proves nothing about the other five. Push, watch CI, fix on red. Toolchain mismatches and rustc skew never block a push.
|
|
14
|
+
|
|
15
|
+
Watch protocol: after push, poll `gh run list --branch <branch> --limit 3 --json status,conclusion,name` until the run completes, up to `GM_CI_WATCH_SECS` (default 180). On red, triage the failure shape (import error → check manifests; type error → snake to PLAN; test failure → root cause; lint → fix in-band; build timeout → re-trigger once, else PRD `blockedBy: external`). Fix at root, push, re-watch. Green CI is the precondition for VERIFY → UPDATE-DOCS.
|
|
16
|
+
|
|
17
|
+
## Single Integration Test
|
|
18
|
+
|
|
19
|
+
One `test.js` at project root. 200-line hard cap. No fixtures, no mocks, no scattered test files. `gm-complete` runs it. Failure = regression to EXECUTE. Prefer compaction over expansion when editing: merge groups, drop redundancy.
|
|
20
|
+
|
|
21
|
+
## Residual-Scan Gate
|
|
22
|
+
|
|
23
|
+
Before allowing transition to update-docs, fire the `residual-scan` verb. Empty PRD is necessary but not sufficient — the gate asks what the agent should have decided to do but did not. Either re-enter planning with appended items and execute, or explicitly state "residual scan: none reachable in-spirit." The `.gm/residual-check-fired` marker makes this one-shot per stopping window. Common residuals: pre-existing build break surfaced this turn, neighboring lint failure, obvious refactor win, observability gap, doc drift, follow-on work the user clearly implied.
|
|
24
|
+
|
|
25
|
+
## Git Gate
|
|
26
|
+
|
|
27
|
+
`git status` clean. `git log` shows the commit pushed. `gh run list` shows the most recent run for the branch concluded green. All three witnessed before transition.
|
|
28
|
+
|
|
29
|
+
## Dispatch
|
|
30
|
+
|
|
31
|
+
`phase-status`, `transition`, `residual-scan`. Spool the CI watch through `in/bash/` so timeouts respect the spool budget.
|
|
19
32
|
|
|
20
33
|
## Transition
|
|
21
34
|
|
|
22
|
-
|
|
35
|
+
Residual-scan clear AND git clean AND CI green → `Skill(skill="gm:update-docs")`. Anything else → `Skill(skill="gm:planning")` or `Skill(skill="gm:gm-execute")` per the gap.
|
package/skills/gm-emit/SKILL.md
CHANGED
|
@@ -4,19 +4,34 @@ description: EMIT phase. Pre-emit debug, write files, post-emit verify from disk
|
|
|
4
4
|
allowed-tools: Skill, Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# gm-emit — EMIT
|
|
7
|
+
# gm-emit — EMIT
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
EMIT is where intent becomes artifact. The phase exists as a distinct gate because writing without verification produces silent drift between what the agent believes was emitted and what landed on disk.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- `phase-status` — read current FSM state
|
|
13
|
-
- `transition` — advance phase
|
|
14
|
-
- `mutable-resolve` — mark mutable witnessed (auto-fires memorize)
|
|
15
|
-
- `memorize-fire` — explicit memorize dispatch
|
|
16
|
-
- Plus existing: `recall`, `codesearch`, `memorize`, `health`, all language stems
|
|
11
|
+
## Pre-Emit
|
|
17
12
|
|
|
18
|
-
|
|
13
|
+
Before writing, debug the planned state. Read the target paths that will be touched — confirm current contents match the assumption the diff is built on. A diff applied to a file the agent has not freshly read is a diff against a stale model. Spool the reads if scope is wide; serial Read calls are acceptable for a small set. Surface mismatches → snake to PLAN.
|
|
14
|
+
|
|
15
|
+
## Sync-Before-Emit
|
|
16
|
+
|
|
17
|
+
rs-codeinsight and rs-search outputs feeding EMIT must come from a freshly-completed index. No cache serves a result without a digest match against the live filesystem. Default invocation always runs fresh. `--read-cache` is permitted only when `.codeinsight.digest` matches exactly; on mismatch, the cache auto-refreshes before the result emits. Emitting from an unverified or partial index is forced closure equivalent to bluffing strength — the agent reads stale output as ground truth and acts on a state that no longer exists.
|
|
18
|
+
|
|
19
|
+
## Write
|
|
20
|
+
|
|
21
|
+
One Edit or Write per artifact. No multi-file batches that conceal which file failed if one fails. Spool larger payloads through `in/nodejs/` when shape demands it.
|
|
22
|
+
|
|
23
|
+
## Post-Emit Verify
|
|
24
|
+
|
|
25
|
+
After each write, re-read the file from disk and assert the change is present. The Read tool is the post-emit witness. Discrepancy → Fix on Sight: fix at root, re-emit, re-verify. A green Write call is not the witness — the verified disk state is.
|
|
26
|
+
|
|
27
|
+
## Fix on Sight
|
|
28
|
+
|
|
29
|
+
Issues surfaced during EMIT (a write that revealed a previously-hidden import error, a generated file that no longer matches its source) are fixed this turn at root cause. Add the residual to PRD before transitioning if the fix expands scope beyond the current slice.
|
|
30
|
+
|
|
31
|
+
## Dispatch
|
|
32
|
+
|
|
33
|
+
`phase-status` to check FSM state before transition. Spool any meaningful reads/writes for auditability.
|
|
19
34
|
|
|
20
35
|
## Transition
|
|
21
36
|
|
|
22
|
-
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately.
|
|
37
|
+
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately. New unknown → `Skill(skill="gm:planning")`.
|
|
@@ -4,19 +4,34 @@ description: EXECUTE phase AND the foundational execution contract for every ski
|
|
|
4
4
|
allowed-tools: Skill, Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# gm-execute — EXECUTE
|
|
7
|
+
# gm-execute — EXECUTE
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Every PRD item resolves through witnessed execution. Real input through real code into real output, witnessed. Anything less leaves the mutable open.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- `phase-status` — read current FSM state
|
|
13
|
-
- `transition` — advance phase
|
|
14
|
-
- `mutable-resolve` — mark mutable witnessed (auto-fires memorize)
|
|
15
|
-
- `memorize-fire` — explicit memorize dispatch
|
|
16
|
-
- Plus existing: `recall`, `codesearch`, `memorize`, `health`, all language stems
|
|
11
|
+
## Fix on Sight
|
|
17
12
|
|
|
18
|
-
|
|
13
|
+
Every issue surfaced during work is fixed in-band, this turn, at root cause. Defer-markers, swallowed errors, suppressed output, skipped tests, and "address it next session" are variants of the same failure: a known-bad signal carried past the moment of detection. Surface → diagnose → fix at root → re-witness → continue. Pre-existing build breaks, lockfile drift, broken deps, lint failures on neighboring code, stale generated files — all become PRD items the same turn they surface, executed before COMPLETE. The user does not have to ask. Genuinely out-of-reach errors (require credentials, depend on down services, demand product decisions) are named with `blockedBy: external` in the PRD — never silently dropped.
|
|
14
|
+
|
|
15
|
+
## Surprise Absorption Prohibition
|
|
16
|
+
|
|
17
|
+
Every unexpected output is a new mutable. The agent that absorbs surprise into its existing model — "that output is weird but the test still passes" — has just resolved an unknown by narrative, which the discipline rejects on principle. Snake back to PLAN, name the new mutable, witness it, resume. The two-pass rule applies: first pass exposes the surprise, second pass either witnesses the new mutable or proves the surprise was a measurement artifact.
|
|
18
|
+
|
|
19
|
+
## Nothing Fake
|
|
20
|
+
|
|
21
|
+
What ships runs against real services, real data, real binaries. Stubs, mocks, placeholder returns, fixture-only paths, "TODO: implement", hardcoded sample responses, and demo-mode fallbacks are forbidden. They produce green checks that survive into production and lie about what works. Behavioral detection: code paths that always succeed, always return the same value regardless of input, or short-circuit a real call to satisfy a type signature are stubs. Before writing a shim, check whether an upstream library already provides that surface — maintaining a local reimplementation drifts and ages.
|
|
22
|
+
|
|
23
|
+
## Browser Witness
|
|
24
|
+
|
|
25
|
+
Editing code that runs in a browser requires a live `exec:browser` witness in the same turn as the edit. Boot the real surface (server up, page reachable, HTTP 200 witnessed), navigate, poll for the global the change affects, `page.evaluate` asserting the specific invariant, capture witnessed values. Variance → fix at root → re-witness. Pure-prose edits to static documents with no JS/canvas/DOM behavior change are exempt with the exemption tagged. Silent skip on actual behavior change is forced closure.
|
|
26
|
+
|
|
27
|
+
## Mutables Resolve
|
|
28
|
+
|
|
29
|
+
The `mutable-resolve` verb auto-fires memorize on success. `witness_evidence` is mandatory — file:line, codesearch hit, exec output snippet. Narrative resolution is rejected. Rows that cannot be witnessed stay `unknown` and the EMIT gate stays closed.
|
|
30
|
+
|
|
31
|
+
## Dispatch
|
|
32
|
+
|
|
33
|
+
Spool every exec. `mutable-resolve` to flip rows. `phase-status` to read FSM state. `transition` when the PRD slice for this phase is complete.
|
|
19
34
|
|
|
20
35
|
## Transition
|
|
21
36
|
|
|
22
|
-
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately.
|
|
37
|
+
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately. New unknown surfaces → snake to `Skill(skill="gm:planning")`, restart chain.
|
package/skills/gm-skill/SKILL.md
CHANGED
|
@@ -6,16 +6,38 @@ allowed-tools: Skill, Read, Write
|
|
|
6
6
|
|
|
7
7
|
# GM — Universal Skill Harness
|
|
8
8
|
|
|
9
|
-
Single canonical body re-exported by every platform-specific gm-<platform> skill. All 15 platforms share this identical
|
|
9
|
+
Single canonical body re-exported by every platform-specific gm-<platform> skill. All 15 platforms share this identical surface. AI-native software engineering orchestrated as a continuous chain: PLAN → EXECUTE → EMIT → VERIFY → UPDATE-DOCS, no stops between phases, no permission gates, the user's first request is the authorization for the whole chain.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Bootstrap
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
`bun x gm-plugkit@latest --daemon` downloads the correct platform binary, verifies SHA256, starts the spool watcher daemon. Idempotent. Call once at session start. Subsequent calls no-op.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Session-ID threading: at skill invoke, generate or detect SESSION_ID (env `SESSION_ID` or `uuid()`). Every rs-exec RPC body and every spool-written task body carries `sessionId: "<id>"`. Task-scoped cleanup (deleteTask, getTask, appendOutput, killSessionTasks) requires matching sessionId. Absence is hard-rejected by the handler — no orphaned tasks.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
## Spool Dispatch Surface
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Every dispatch goes through the spool. Tool args are ephemeral, inline, do not survive compaction, are not replayable. A file-based surface inverts every one of those: the request lives on disk before the watcher reads it, the watcher is detached from the agent process, the output triplet (`.out`, `.err`, `.json`) is auditable after the fact.
|
|
20
|
+
|
|
21
|
+
Write to `.gm/exec-spool/in/<lang>/<N>.<ext>` (nodejs, python, bash, typescript, go, rust, c, cpp, java, deno) or `in/<verb>/<N>.txt` (codesearch, recall, memorize, wait, sleep, status, close, browser, runner, type, kill-port, forget, feedback, learn-status, learn-debug, learn-build, discipline, pause, health). Watcher streams `out/<N>.out` and `out/<N>.err` line-by-line, then writes `out/<N>.json` metadata (exitCode, durationMs, timedOut, startedAt, endedAt) at completion.
|
|
22
|
+
|
|
23
|
+
Only `git` and `gh` run directly via the Bash tool. Inline `node script.js`, `Bash(exec:<anything>)`, JSON-form dispatch — all denied at the hook layer.
|
|
24
|
+
|
|
25
|
+
## Daemonize by Default
|
|
26
|
+
|
|
27
|
+
The watcher returns a task_id immediately and tails the logfile up to 30 seconds of wall-clock before returning. Short tasks complete inside the window and look synchronous. Long tasks return the task_id with partial output and continue running. The agent never re-spawns a long task to check on it — that orphans the first one.
|
|
28
|
+
|
|
29
|
+
Resumption grammar: `tail` drains additional output without blocking. `watch` blocks until a regex matches or timeout elapses. `wait` is a pure timer. `sleep` blocks on a specific task's output. `close` terminates. Every RPC response carries `running_task_ids` for the calling session so the agent never loses track of background work it spawned.
|
|
30
|
+
|
|
31
|
+
## Hooks Throw, Never Mutate
|
|
32
|
+
|
|
33
|
+
A hook that blocks a tool call throws an error with an imperative instruction string. It does not rewrite the call's arguments into a self-failing form. The thrown error is the entire denial surface. Throw form is for "use a different tool" (the model adapts policy); mutate form would be for "run this corrected version" (the model reads it as a broken tool and retries with simpler commands, reinforcing the wrong mental model).
|
|
34
|
+
|
|
35
|
+
## Meaning Through Haiku
|
|
36
|
+
|
|
37
|
+
Any task whose correctness depends on understanding — summarize, classify, extract intent, rewrite, translate, semantic dedup, score, label, decide-if-two-texts-mean-the-same — routes through `Agent(subagent_type='gm:textprocessing', model='haiku', ...)`. One subagent per item, N items in N parallel calls in one message. Code does mechanics well and meaning badly. A keyword-list or regex-on-meaning-phrases loop deciding semantic questions is a stub that ships a green check that lies.
|
|
38
|
+
|
|
39
|
+
## End-to-End Chaining
|
|
40
|
+
|
|
41
|
+
When SKILL.md includes `end-to-end: true`, the adapter parses stdout for trailing JSON: `{"nextSkill": "...", "context": {...}, "phase": "..."}`. Non-null `nextSkill` → invoke `Skill(skill="gm:<nextSkill>")` with context, repeat until null. Five skill invocations auto-chain into one user invocation.
|
|
20
42
|
|
|
21
43
|
Every task returns complete: taskId, exitCode, durationMs, timedOut, stdout, stderr. Background tasks return immediately with task_id; continue with `in/status/<N>.txt` (tail), `in/watch/<N>.txt` (watch), or `in/close/<N>.txt` (close).
|
package/skills/planning/SKILL.md
CHANGED
|
@@ -4,19 +4,39 @@ description: State machine orchestrator. Mutable discovery, PRD construction, an
|
|
|
4
4
|
allowed-tools: Skill, Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# planning — PLAN
|
|
7
|
+
# planning — PLAN
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Every turn begins with prior memory already loaded by auto-recall. PLAN adds targeted reconnaissance on top of that injection. Before any unknown is named as absent, it has been searched for. Before an abstraction is designed, the codebase has been checked for one that already exists.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- `phase-status` — read current FSM state
|
|
13
|
-
- `transition` — advance phase
|
|
14
|
-
- `mutable-resolve` — mark mutable witnessed (auto-fires memorize)
|
|
15
|
-
- `memorize-fire` — explicit memorize dispatch
|
|
16
|
-
- Plus existing: `recall`, `codesearch`, `memorize`, `health`, all language stems
|
|
11
|
+
## ORIENT
|
|
17
12
|
|
|
18
|
-
The
|
|
13
|
+
The first action of PLAN is a parallel pack: 3–5 `exec:recall` calls and 3–5 `exec:codesearch` calls against the request's nouns, dispatched in one message. Hits become weak_prior — still witnessed before adoption. Misses confirm the unknown is fresh. The pack is free relative to the duplicated discovery and disagree-with-prior-witness risk it prevents. Serial probing of nouns one-at-a-time is the failure mode this discipline guards against.
|
|
14
|
+
|
|
15
|
+
Spool the pack as the opening move:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
.gm/exec-spool/in/recall/1.txt "<noun phrase 1>"
|
|
19
|
+
.gm/exec-spool/in/recall/2.txt "<noun phrase 2>"
|
|
20
|
+
.gm/exec-spool/in/recall/3.txt "<noun phrase 3>"
|
|
21
|
+
.gm/exec-spool/in/codesearch/1.txt "<two-word phrase 1>"
|
|
22
|
+
.gm/exec-spool/in/codesearch/2.txt "<two-word phrase 2>"
|
|
23
|
+
.gm/exec-spool/in/codesearch/3.txt "<two-word phrase 3>"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
All in one message. Read `out/*.json` together.
|
|
27
|
+
|
|
28
|
+
## Maximal Cover
|
|
29
|
+
|
|
30
|
+
Scope-exceeds-reach is a planning condition, not a stopping condition. The covering family is the plan. Enumerate every bounded subset of the request witnessable from this session; write the family into `.gm/prd.yml` with the dependency graph explicit. Residuals within the spirit of the ask AND reachable from this session are self-authorized — expand the PRD and declare the read in one line ("treating X as in-spirit because Y"). Only out-of-spirit or unreachable residuals are name-and-stop.
|
|
31
|
+
|
|
32
|
+
## Mutables File
|
|
33
|
+
|
|
34
|
+
`.gm/mutables.yml` is co-equal with `.gm/prd.yml`. Every unknown surfaced lands as a row with `status: unknown`. The hook layer hard-blocks Write, Edit, `git commit`, `git push`, and stop while any row remains unknown. Rows flip to `witnessed` only when `witness_evidence` carries concrete proof — file:line, codesearch hit, exec output snippet. Narrative resolution is rejected on read. PLAN exits only at ε = 0 on the final pass.
|
|
35
|
+
|
|
36
|
+
## Dispatch
|
|
37
|
+
|
|
38
|
+
`phase-status` to read FSM state. `transition` to advance. `mutable-resolve` to mark witnessed (auto-fires memorize). Plus the usual `recall`, `codesearch`, `memorize`, `health`, language stems.
|
|
19
39
|
|
|
20
40
|
## Transition
|
|
21
41
|
|
|
22
|
-
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately.
|
|
42
|
+
Read `out/<N>.json::nextSkill`. Invoke `Skill(skill="gm:<nextSkill>")` immediately.
|
|
@@ -4,19 +4,44 @@ description: UPDATE-DOCS phase. Refresh README.md, AGENTS.md, and docs/index.htm
|
|
|
4
4
|
allowed-tools: Skill, Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# update-docs — UPDATE-DOCS
|
|
7
|
+
# update-docs — UPDATE-DOCS
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Docs reflect the current state of the system, not its history. Every rule in AGENTS.md is a present-tense statement about what must or must-not be the case in code now. Past-tense framing, `(FIXED)` markers, dated audit entries, and "we used to X, now we Y" phrasing belong in `git log` and `CHANGELOG.md` — never in AGENTS.md.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- `phase-status` — read current FSM state
|
|
13
|
-
- `transition` — advance phase
|
|
14
|
-
- `mutable-resolve` — mark mutable witnessed (auto-fires memorize)
|
|
15
|
-
- `memorize-fire` — explicit memorize dispatch
|
|
16
|
-
- Plus existing: `recall`, `codesearch`, `memorize`, `health`, all language stems
|
|
11
|
+
## AGENTS.md and CLAUDE.md
|
|
17
12
|
|
|
18
|
-
|
|
13
|
+
Edits to AGENTS.md and CLAUDE.md route through the memorize subagent only — never inline-edit. Invocation:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Agent(subagent_type='gm:memorize', model='haiku', run_in_background=true, prompt='## CONTEXT TO MEMORIZE\n<fact>')
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The classifier rejects changelog-shaped facts from AGENTS.md ingestion (rs-learn still accepts them). Multiple facts → multiple parallel Agent calls in one message.
|
|
20
|
+
|
|
21
|
+
## README.md
|
|
22
|
+
|
|
23
|
+
Refresh to reflect the surface a new reader actually encounters. Remove stale install steps, version pins, and features that no longer exist. Add what was added this session if it changes the public surface.
|
|
24
|
+
|
|
25
|
+
## docs/index.html
|
|
26
|
+
|
|
27
|
+
Regenerate or hand-edit to reflect the same surface. Site builds run from `site/`; the deployed `/` route renders from `site/content/pages/home.yaml` via flatspace. Landing edits go through `site/theme.mjs` (Hero) and the YAML — never `site/index.html` directly. `docs/styles.css` is generated from `site/input.css`; append to the source, not the output.
|
|
28
|
+
|
|
29
|
+
## CHANGELOG.md
|
|
30
|
+
|
|
31
|
+
One entry per commit landed this session. The commit message line plus a one-sentence "why" — no recipe, no narration. CHANGELOG carries the history that AGENTS.md refuses.
|
|
32
|
+
|
|
33
|
+
## Commit and Push
|
|
34
|
+
|
|
35
|
+
Stage doc updates only — never bundle them with code changes from earlier phases (those committed at their own time). One commit, present-tense imperative subject. Push to main. The push triggers the docs pipeline if the repo has one.
|
|
36
|
+
|
|
37
|
+
## COMPLETE
|
|
38
|
+
|
|
39
|
+
This is the terminal phase. After push lands, the chain signals COMPLETE. No further `Skill()` invocation; the orchestrator records the chain as concluded.
|
|
40
|
+
|
|
41
|
+
## Dispatch
|
|
42
|
+
|
|
43
|
+
`phase-status`, `transition` to COMPLETE.
|
|
19
44
|
|
|
20
45
|
## Transition
|
|
21
46
|
|
|
22
|
-
|
|
47
|
+
`nextSkill: null` from the orchestrator means the chain is done. End of skill body.
|