spexcode 0.4.0 → 0.4.3
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/README.md +37 -17
- package/package.json +9 -5
- package/spec-cli/README.md +23 -14
- package/spec-cli/hooks/dispatch.sh +7 -5
- package/spec-cli/hooks/harness.sh +19 -8
- package/spec-cli/src/anchors.ts +163 -30
- package/spec-cli/src/cli.ts +97 -42
- package/spec-cli/src/client.ts +34 -11
- package/spec-cli/src/doctor.ts +174 -36
- package/spec-cli/src/gateway-auth.ts +194 -0
- package/spec-cli/src/gateway-hub.ts +360 -0
- package/spec-cli/src/gateway.ts +31 -16
- package/spec-cli/src/git.ts +12 -5
- package/spec-cli/src/graph.ts +53 -36
- package/spec-cli/src/graphStream.ts +265 -34
- package/spec-cli/src/guide.ts +157 -76
- package/spec-cli/src/harness-select.ts +20 -6
- package/spec-cli/src/harness.ts +266 -67
- package/spec-cli/src/help.ts +84 -41
- package/spec-cli/src/host.ts +610 -0
- package/spec-cli/src/identity-presets.d.ts +13 -0
- package/spec-cli/src/identity-presets.js +128 -0
- package/spec-cli/src/index.ts +163 -86
- package/spec-cli/src/init.ts +53 -25
- package/spec-cli/src/layout.ts +5 -5
- package/spec-cli/src/lint.ts +115 -169
- package/spec-cli/src/login-page.ts +12 -5
- package/spec-cli/src/materialize.ts +39 -13
- package/spec-cli/src/mentions.ts +16 -11
- package/spec-cli/src/opencode.ts +145 -0
- package/spec-cli/src/pi-harness.ts +124 -0
- package/spec-cli/src/project-identity.ts +73 -0
- package/spec-cli/src/pty-bridge.ts +321 -521
- package/spec-cli/src/pty-helper.mjs +86 -0
- package/spec-cli/src/reaper.ts +16 -8
- package/spec-cli/src/reviewSnapshot.ts +23 -0
- package/spec-cli/src/reviews.ts +347 -0
- package/spec-cli/src/session-timeline.ts +162 -0
- package/spec-cli/src/sessions.ts +210 -63
- package/spec-cli/src/shim-runtime.ts +169 -0
- package/spec-cli/src/slash-commands.ts +76 -0
- package/spec-cli/src/source-files.ts +79 -0
- package/spec-cli/src/specs.ts +47 -24
- package/spec-cli/src/supervise.ts +37 -15
- package/spec-cli/src/tree.ts +8 -8
- package/spec-cli/src/uninstall.ts +56 -23
- package/spec-cli/templates/hooks/prepare-commit-msg +32 -13
- package/spec-cli/templates/spec/project/.plugins/{extract → commands/extract}/spec.md +24 -18
- package/spec-cli/templates/spec/project/.plugins/{regroup → commands/regroup}/spec.md +3 -3
- package/spec-cli/templates/spec/project/.plugins/commands/rename/spec.md +11 -0
- package/spec-cli/templates/spec/project/.plugins/commands/spec.md +30 -0
- package/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +8 -0
- package/spec-cli/templates/spec/project/.plugins/commands/tidy/spec.md +43 -0
- package/spec-cli/templates/spec/project/.plugins/core/idle/spec.md +1 -1
- package/spec-cli/templates/spec/project/.plugins/core/mark-active/spec.md +2 -0
- package/spec-cli/templates/spec/project/.plugins/core/session-fail/spec.md +1 -1
- package/spec-cli/templates/spec/project/.plugins/core/spec-first/spec-first.sh +28 -39
- package/spec-cli/templates/spec/project/.plugins/core/spec-first/spec.md +5 -3
- package/spec-cli/templates/spec/project/.plugins/core/spec-of-file/spec.md +1 -1
- package/spec-cli/templates/spec/project/.plugins/core/spec.md +2 -2
- package/spec-cli/templates/spec/project/.plugins/core/stop-gate/spec.md +7 -1
- package/spec-cli/templates/spec/project/.plugins/prompts/forge-link/spec.md +2 -2
- package/spec-cli/templates/spec/project/.plugins/prompts/reproduce-before-fix/spec.md +5 -5
- package/spec-cli/templates/spec/project/.plugins/prompts/spec.md +10 -6
- package/spec-cli/templates/spec/project/.plugins/skills/distill/spec.md +62 -0
- package/spec-cli/templates/spec/project/.plugins/skills/spec.md +19 -0
- package/spec-cli/templates/spec/project/.plugins/spec.md +17 -12
- package/spec-cli/templates/spec/project/spec.md +6 -5
- package/spec-cli/templates/spexcode.json +4 -2
- package/spec-dashboard/dist/assets/Dashboard-CiHh-gLD.js +27 -0
- package/spec-dashboard/dist/assets/EvalsPage-DmiX3rdU.js +2 -0
- package/spec-dashboard/dist/assets/IssuesPage-CIbVGRUJ.js +1 -0
- package/spec-dashboard/dist/assets/MobileApp-D-N9_eh0.js +2 -0
- package/spec-dashboard/dist/assets/Modal-DHMzSFJ4.js +1 -0
- package/spec-dashboard/dist/assets/PageScroll-C15adEYI.js +1 -0
- package/spec-dashboard/dist/assets/ProjectsPage-sQpzglp5.js +1 -0
- package/spec-dashboard/dist/assets/SessionInterface-6GBZ9nXN.css +32 -0
- package/spec-dashboard/dist/assets/SessionInterface-B8pGU7Rg.js +39 -0
- package/spec-dashboard/dist/assets/SessionWindow-CuDO_67z.js +13 -0
- package/spec-dashboard/dist/assets/Settings-C_N1wX1f.js +1 -0
- package/spec-dashboard/dist/assets/bindings-BC9vqpYU.js +1 -0
- package/spec-dashboard/dist/assets/index-DmWbmvCq.js +41 -0
- package/spec-dashboard/dist/assets/index-GGIVdKwH.css +1 -0
- package/spec-dashboard/dist/assets/terminalFont-DmTPNdbU.js +1 -0
- package/spec-dashboard/dist/index.html +10 -10
- package/spec-dashboard/src/reviewFilters.js +279 -0
- package/spec-dashboard/src/reviewQuery.js +174 -0
- package/spec-dashboard/src/session.js +167 -0
- package/spec-eval/src/cli.ts +80 -45
- package/spec-eval/src/evaltab.ts +4 -3
- package/spec-eval/src/humanok.ts +1 -1
- package/spec-eval/src/matrix.ts +693 -0
- package/spec-eval/src/scenarios.ts +116 -4
- package/spec-eval/src/sessioneval.ts +726 -66
- package/spec-cli/src/migrate-table.ts +0 -398
- package/spec-cli/src/migrate.ts +0 -386
- package/spec-cli/templates/spec/project/.plugins/distill/spec.md +0 -74
- package/spec-cli/templates/spec/project/.plugins/supervisor/spec.md +0 -8
- package/spec-cli/templates/spec/project/.plugins/tidy/spec.md +0 -25
- package/spec-dashboard/dist/assets/Dashboard-CTcH2eW9.js +0 -27
- package/spec-dashboard/dist/assets/EvalsPage-CJNKwHLN.js +0 -2
- package/spec-dashboard/dist/assets/FoldToggle-CVFbBpyW.js +0 -1
- package/spec-dashboard/dist/assets/IssuesPage-kULjonqj.js +0 -1
- package/spec-dashboard/dist/assets/MobileApp-B0ZJju8K.js +0 -1
- package/spec-dashboard/dist/assets/SessionInterface-BRKJqU2U.js +0 -71
- package/spec-dashboard/dist/assets/SessionInterface-DYP7pi_n.css +0 -32
- package/spec-dashboard/dist/assets/SessionWindow-CDhEL7wO.js +0 -9
- package/spec-dashboard/dist/assets/Settings-BL6FV_8S.js +0 -1
- package/spec-dashboard/dist/assets/index-DmQsNYKK.css +0 -1
- package/spec-dashboard/dist/assets/index-DulGPk6A.js +0 -41
- /package/spec-cli/templates/spec/project/.plugins/{distill → skills/distill}/digest.mjs +0 -0
package/spec-cli/src/help.ts
CHANGED
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
type Entry = { line: string; body: string; see?: string }
|
|
15
15
|
|
|
16
16
|
const SEL_NOTE = `SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
|
|
17
|
-
accepts any of the
|
|
17
|
+
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
|
|
18
|
+
none (or @all) means every session.`
|
|
18
19
|
|
|
19
20
|
const ROUTING_NOTE = `Backend routing: every backend-touching verb accepts --api <url> (--port <n> = localhost sugar) to name
|
|
20
21
|
its backend explicitly — the flag always wins. Bare, it resolves: worker env / the cwd project's live
|
|
@@ -24,9 +25,9 @@ const DOT_NOTE = `\`.\` as a node argument means the node THIS worktree works on
|
|
|
24
25
|
node/<id> branch). One-shot payload reads (graph · spec search · session ls/show/review · eval ls ·
|
|
25
26
|
scenario ls · issue ls/show/links) take --json.`
|
|
26
27
|
|
|
27
|
-
const MENTION_NOTE = `Mentions: @session · [[node]] · @new work in ANY prompt, issue, or remark body —
|
|
28
|
-
arg included. [[node]] names the topic node; @session hands the text to that live agent;
|
|
29
|
-
fresh worker on the thread's node.`
|
|
28
|
+
const MENTION_NOTE = `Mentions: @session · [[node]] · @new / @new:<launcher> work in ANY prompt, issue, or remark body —
|
|
29
|
+
text passed as a CLI arg included. [[node]] names the topic node; @session hands the text to that live agent;
|
|
30
|
+
@new spawns a fresh worker on the thread's node (bare = configured default; :<launcher> = that named profile).`
|
|
30
31
|
|
|
31
32
|
const ENTRIES: Record<string, Entry> = {
|
|
32
33
|
// ── project verbs (implicit object = this project) ────────────────────────
|
|
@@ -44,47 +45,53 @@ derived status, title, and attention badges (drift:N · stale:N · issues:N · g
|
|
|
44
45
|
see: 'spex spec search (find one node by intent) · spex session ls (just the sessions, as a table)',
|
|
45
46
|
},
|
|
46
47
|
init: {
|
|
47
|
-
line: 'init [dir] adopt SpexCode on a repo: seed .spec + hooks + materialize [--preset name]',
|
|
48
|
-
body: `Usage: spex init [dir=cwd] [--preset default]
|
|
48
|
+
line: 'init [dir] adopt SpexCode on a repo: seed .spec + hooks + materialize --harness <ids> [--preset name]',
|
|
49
|
+
body: `Usage: spex init [dir=cwd] --harness <id[,id]|plugin:<folder>> [--preset default]
|
|
49
50
|
|
|
50
51
|
Scaffolds adoption in one shot: seeds a starter .spec tree (project root + .plugins plugins), plants
|
|
51
52
|
spexcode.json, installs the git hooks, and materializes the harness artifacts (contract block +
|
|
52
|
-
shims).
|
|
53
|
+
shims). --harness is REQUIRED — the explicit choice of which harnesses materialize delivers into
|
|
54
|
+
(stamped as spexcode.json "harnesses"; only their launchers are seeded); a pre-existing "harnesses"
|
|
55
|
+
field satisfies it. Additive — never overwrites your files. --preset picks the .plugins plugin tier (cumulative).
|
|
53
56
|
Footprint is fixed: materialized artifacts are never tracked — hidden via the per-clone .git/info/exclude, with
|
|
54
57
|
a tracked/mixed CLAUDE.md/AGENTS.md covered by the clean/smudge filter (see spex guide footprint).`,
|
|
55
58
|
see: 'spex guide (the full setup workflow) · spex uninstall (the inverse) · spex spec lint (adoption TODO)',
|
|
56
59
|
},
|
|
57
60
|
materialize: {
|
|
58
|
-
line: 'materialize
|
|
61
|
+
line: 'materialize the base pass of harness adaptation: render .spec/.plugins into your harness’s artifacts',
|
|
59
62
|
body: `Usage: spex materialize
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
The base operation of HARNESS ADAPTATION: one pass renders the spec tree's surface nodes into the
|
|
65
|
+
artifacts each selected harness auto-discovers — the managed <!-- spexcode --> block of
|
|
66
|
+
CLAUDE.md/AGENTS.md, the .claude/.codex shims, the skills/agents — and prints the content hash.
|
|
67
|
+
The outputs are derived and never tracked: to change one, edit its source (.plugins, spexcode.json)
|
|
68
|
+
and re-materialize — never the artifact. Not a one-time setup: it anchors on git-native events
|
|
69
|
+
(init · this verb · session-worktree creation · the pre-commit/post-checkout/post-merge hooks) —
|
|
70
|
+
run it by hand after a toolchain update, or in the setup step of any clone that has no spex-planted
|
|
71
|
+
hooks yet (CI, a cloud agent): generated and excluded, the artifacts never arrive via git.`,
|
|
67
72
|
see: 'spex doctor (verify the materialized artifacts actually reach an agent)',
|
|
68
73
|
},
|
|
69
74
|
doctor: {
|
|
70
|
-
line: 'doctor diagnose whether the workflow
|
|
71
|
-
body: `Usage: spex doctor
|
|
72
|
-
hooks + handler existence · backend
|
|
75
|
+
line: 'doctor diagnose spec health and whether the workflow reaches this agent [--contract|--conflicts]',
|
|
76
|
+
body: `Usage: spex doctor spec-health findings + delivery report: preconditions · git-hook floor ·
|
|
77
|
+
contract · hooks + handler existence · backend · footprint
|
|
73
78
|
spex doctor --contract print the composed surface:system text any agent here reads
|
|
74
79
|
spex doctor --conflicts detect double-delivery (loose artifacts beside the managed ones)
|
|
75
80
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
81
|
+
Bare doctor is the opt-in, read-only health surface: it reports altitude and breadth findings without
|
|
82
|
+
putting them in the lint gate, then audits workflow delivery. Run it directly or let the tidy workflow
|
|
83
|
+
consume the same visible diagnosis.`,
|
|
84
|
+
see: 'spex spec lint (deterministic graph/contract gate) · spex materialize (repair delivery artifacts)',
|
|
79
85
|
},
|
|
80
86
|
uninstall: {
|
|
81
|
-
line: 'uninstall [dir]
|
|
87
|
+
line: 'uninstall [dir] remove all derived artifacts + local state; preserve tracked intent [--hooks]',
|
|
82
88
|
body: `Usage: spex uninstall [dir=cwd] [--hooks]
|
|
83
89
|
|
|
84
|
-
Removes
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
90
|
+
Removes all SpexCode-derived wiring and project-local state: contract blocks, harness shims,
|
|
91
|
+
generated skills/agents, plugin bundles, trust/filter/exclude entries, and the global per-project
|
|
92
|
+
store. Your tracked intent (.spec including .plugins, plus spexcode.json) and surrounding user prose
|
|
93
|
+
are preserved. Git hooks remain unless --hooks; that flag removes only unmodified canonical copies.`,
|
|
94
|
+
see: 'spex init (re-adopt later — your tracked intent survives)',
|
|
88
95
|
},
|
|
89
96
|
serve: {
|
|
90
97
|
line: 'serve [api|ui] api (default) = the backend :8787 · ui = the dashboard :5173 on top of it',
|
|
@@ -104,6 +111,30 @@ projects coexist on one host). Loopback-only by default; --host 0.0.0.0 opens it
|
|
|
104
111
|
still plain HTTP with no gate, so bind wide only on a network you trust.`,
|
|
105
112
|
see: 'GET /health (backend liveness probe)',
|
|
106
113
|
},
|
|
114
|
+
dashboard: {
|
|
115
|
+
line: 'dashboard ONE dashboard for every project you serve — no --api-port pairing [--port N=5173]',
|
|
116
|
+
body: `Usage: spex dashboard [--port N=5173] [--host H=127.0.0.1]
|
|
117
|
+
|
|
118
|
+
The HOST gateway: serves the built dashboard once and routes to EVERY backend the current user runs —
|
|
119
|
+
the multi-project hub engine plus the host registry on top. It continuously reconciles the per-project
|
|
120
|
+
endpoint records each \`spex serve\` publishes (validating each against the live backend's /api/instance
|
|
121
|
+
identity), keeps a durable known-project catalog, and proxies each project's API + SSE + terminal
|
|
122
|
+
socket under /p/<projectId>/* — the project is named in the path, so nothing is "current" and no
|
|
123
|
+
pairing flag exists.
|
|
124
|
+
|
|
125
|
+
Admin surface (hub-authorized: implicit from loopback until an admin password is set, then cookie
|
|
126
|
+
sessions): GET /projects (the validated list + gating state) · GET /projects/stream (SSE) ·
|
|
127
|
+
GET /projects/browse?path=… (read-only host folder picker) · POST /projects {root, initGit?, init?}
|
|
128
|
+
(explicit setup, then register) · GET|PUT /projects/<id>/config (raw portable
|
|
129
|
+
spexcode.json, revision-guarded) · POST /projects/<id>/init|doctor|serve
|
|
130
|
+
(run the real \`spex init\`/\`spex doctor\`, or start an offline project's backend, detached — a
|
|
131
|
+
backend never depends on this gateway staying up) · PUT|DELETE /projects/admin-password and
|
|
132
|
+
/projects/<id>/password (the gates). A gated project answers /p/<id>/login with the designed page.
|
|
133
|
+
|
|
134
|
+
Loopback-only by default; --host widens the bind — the admin surface stays locked to loopback until
|
|
135
|
+
an admin password exists, and ungated projects serve open.`,
|
|
136
|
+
see: 'spex serve (each project\'s backend) · spex serve ui (explicit one-backend pairing)',
|
|
137
|
+
},
|
|
107
138
|
|
|
108
139
|
// ── the noun drawers ──────────────────────────────────────────────────────
|
|
109
140
|
spec: {
|
|
@@ -122,14 +153,18 @@ owner — the reverse edge: a file's GOVERNORS (code: — drives drift + eval fr
|
|
|
122
153
|
over-owned → split the file). --actionable prints NOTHING unless action is needed (hook use).
|
|
123
154
|
|
|
124
155
|
lint — checks the whole spec↔code graph and exits non-zero on errors. Errors: integrity (a
|
|
125
|
-
code:/related: file does not exist; a dead/ambiguous/unverifiable \`path#symbol\`
|
|
126
|
-
whose language has no designated extractor or whose extractor can't run here
|
|
127
|
-
|
|
128
|
-
|
|
156
|
+
code:/related: file does not exist; a dead/ambiguous/unverifiable \`path#symbol\` selector; a selector
|
|
157
|
+
whose language has no designated extractor or whose extractor can't run here; a duplicate entry, a
|
|
158
|
+
base path both bare and scoped, or a selector on a glob/directory) · anchor-drift (a
|
|
159
|
+
commit since the spec's version touched an ANCHORED unit's lines, unacked — the blocking tier of
|
|
160
|
+
drift; same-file selectors OR'd, one error naming the hit selectors) · one-govern (a node
|
|
161
|
+
governs >1 DISTINCT file) · living (a "## vN" changelog heading) · id-format (an
|
|
129
162
|
id char outside the whitelist — ascii [a-z0-9-] or a non-ascii unicode letter/number, CJK ok — or a
|
|
130
|
-
leaf id reused) · mention (a [[id]] naming no node). Warns:
|
|
131
|
-
(UNANCHORED drift — always advisory, never blocks
|
|
132
|
-
|
|
163
|
+
leaf id reused) · mention (a [[id]] naming no node). Warns: coverage · drift
|
|
164
|
+
(UNANCHORED drift — always advisory, never blocks; on a scoped file's MISS, \`lint.scopedCodeMiss:
|
|
165
|
+
"ignore"\` may silence it) · anchor (anchoring a type) · related-drift (a scoped related row warns
|
|
166
|
+
per selector HIT, misses silent) · owners (whole-file governors only; scoped don't count) ·
|
|
167
|
+
confusable-id (two leaf ids one edit apart). spec lint's errors BLOCK commits (the pre-commit shim; bypass SPEXCODE_SKIP_LINT=1);
|
|
133
168
|
contrast \`spex eval lint\`, which is pure advisory and never blocks anyone.
|
|
134
169
|
|
|
135
170
|
ack — stamp Spec-OK on HEAD (an empty stamp commit): the drift remedy when only MECHANICS changed
|
|
@@ -141,10 +176,10 @@ edit the spec instead — same commit as the code.`,
|
|
|
141
176
|
session: {
|
|
142
177
|
line: 'session <verb> the worktree state machine: new · ls · watch · wait · review · merge · send · …',
|
|
143
178
|
body: `Manager verbs (dispatch, monitor, land):
|
|
144
|
-
spex session new "<prompt>" [--prompt-file <path>|-] [--
|
|
179
|
+
spex session new "<prompt>" [--prompt-file <path>|-] [--launcher <name>]
|
|
145
180
|
Launch a worker in its own node worktree. Give it ONLY its task — the dev-flow contract
|
|
146
|
-
reaches it through the materialized system prompt.
|
|
147
|
-
|
|
181
|
+
reaches it through the materialized system prompt. The prompt's first [[id]] mention binds
|
|
182
|
+
the session to that node. --prompt-file <path>|- carries a long prompt
|
|
148
183
|
without shell quoting (exclusive with the inline prompt). Then MONITOR it (wait/watch below).
|
|
149
184
|
spex session ls [SEL…] [--status a,b] [--json] one-shot table of living sessions
|
|
150
185
|
spex session watch [SEL…] [--as NAME] [--idle] [--interval N=5]
|
|
@@ -196,15 +231,16 @@ ${MENTION_NOTE}`,
|
|
|
196
231
|
see: 'spex eval ls --session <SEL> (the session’s measured loss) · spex help eval',
|
|
197
232
|
},
|
|
198
233
|
eval: {
|
|
199
|
-
line: 'eval <verb> the measurement system: add · ls · scenario ls · lint · ok · retract · clean',
|
|
234
|
+
line: 'eval <verb> the measurement system: add · ls · scenario ls · matrix · lint · ok · retract · clean',
|
|
200
235
|
body: `Usage: spex eval add [<node>|.] [--scenario <name>] (--pass|--fail) [--note <text>]
|
|
201
236
|
[--image <png> …repeatable] [--result <path|->] [--video <webm|mp4>] [--timeline <json>]
|
|
202
237
|
spex eval ls [<node>|.] [--json] a node's eval timeline, newest first
|
|
203
238
|
spex eval ls --session <SEL> [--json] a session's aggregate: its changed nodes' scores
|
|
204
239
|
spex eval ls --session <SEL> --export [--open | --out <path>]
|
|
205
240
|
spex eval scenario ls [<node>|.] [--unmeasured] [--json] declared scenarios; bare = every node
|
|
241
|
+
spex eval matrix <launcher> [--node <id>] [--rows k1,k2] the harness live-behavior matrix
|
|
206
242
|
spex eval lint [--changed] measurement-layer findings (advisory, always exit 0)
|
|
207
|
-
spex eval ok <node> [--scenario <name>] the HUMAN sign-off on the scenario's latest
|
|
243
|
+
spex eval ok <node> [--scenario <name>] the HUMAN sign-off on the scenario's latest measurement
|
|
208
244
|
spex eval retract [<node>|.] [--scenario <name>] [--last | --ts <iso>] [--note <why>]
|
|
209
245
|
spex eval clean [--keep-latest | --all] GC the content-addressed evidence cache
|
|
210
246
|
|
|
@@ -218,19 +254,25 @@ ls — node-scoped bare (its per-scenario eval history); session-scoped with an
|
|
|
218
254
|
✦-marked ahead of the inherited baseline. --export writes that evaluation as ONE self-contained
|
|
219
255
|
HTML artifact (diff · evidence inlined · gates) for CI/sharing.
|
|
220
256
|
|
|
221
|
-
scenario ls — the DECLARED contracts (name · tags · latest verdict), no evals: bare lists every
|
|
257
|
+
scenario ls — the DECLARED contracts (name · tags · normalized test reference · latest verdict), no evals: bare lists every
|
|
222
258
|
measurable node's scenarios; --unmeasured keeps only the never-measured — the blind-spot worklist.
|
|
223
259
|
|
|
260
|
+
matrix — run the eight-row harness live-behavior matrix against a REAL dispatched session of the named
|
|
261
|
+
launcher (the harness-adapter acceptance rule, defined once in spec-eval/src/matrix.ts): it syncs the
|
|
262
|
+
rows into the \`<harness>-harness\` node's eval.md scenarios, drives one worker through undeclared-stop ·
|
|
263
|
+
pretooluse-block · ask-note · deliver-steer · resume · liveness · commit-gate · close-residue, and files
|
|
264
|
+
a per-row measurement with its evidence transcript. A new harness needs only its launcher + spec node.
|
|
265
|
+
|
|
224
266
|
lint — the measurement layer's findings: malformed eval.md (eval-schema) · unmeasured (eval-missing) ·
|
|
225
267
|
stale (eval-drift) · orphaned remark tracks (eval-dangling) · governed source with no eval.md
|
|
226
268
|
(eval-coverage — the same name and shape as spec lint's coverage, one rule per layer) · over-owned
|
|
227
269
|
files (eval-owners). --changed scopes to the nodes THIS branch touched. spec lint's errors block
|
|
228
270
|
commits; eval lint is PURE ADVISORY, always exit 0 — a measurement gap never blocks anyone.
|
|
229
271
|
|
|
230
|
-
ok — the human's reviewed-and-agreed mark on the scenario's LATEST
|
|
231
|
-
sign-off bound to that one immutable
|
|
272
|
+
ok — the human's reviewed-and-agreed mark on the scenario's LATEST measurement: an appended, monotonic
|
|
273
|
+
sign-off bound to that one immutable measurement (a newer measurement or staleness releases it on its own —
|
|
232
274
|
no un-ok exists). The evals feed default-hides a fresh, ok'd scenario; a governed session is refused
|
|
233
|
-
(an agent's judgment on a
|
|
275
|
+
(an agent's judgment on a measurement is a remark, never a self-blessing).
|
|
234
276
|
|
|
235
277
|
retract — the sanctioned undo for a botched filing: APPENDS a retraction event (traceable, never
|
|
236
278
|
deletes a line); the previous eval becomes latest again, or the scenario honestly returns to
|
|
@@ -357,6 +399,7 @@ Project verbs (implicit object = this project)
|
|
|
357
399
|
${ENTRIES.doctor.line}
|
|
358
400
|
${ENTRIES.uninstall.line}
|
|
359
401
|
${ENTRIES.serve.line}
|
|
402
|
+
${ENTRIES.dashboard.line}
|
|
360
403
|
|
|
361
404
|
Noun drawers
|
|
362
405
|
${ENTRIES.spec.line}
|