harness-everything 0.30.6 → 0.30.8
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +52 -0
- package/ci/mechanism-2ad-action-gate-classifier-hardening.test.js +14 -0
- package/ci/prompt-contract-regressions.test.js +117 -0
- package/docs/workflows/fable-discipline.md +18 -59
- package/docs/workflows/fable-mode.md +1 -1
- package/docs/workflows/git-commit.md +21 -67
- package/docs/workflows/grill-me.md +20 -12
- package/docs/workflows/grill-with-docs.md +21 -12
- package/evals/fable-discipline/tasks/positive-trigger.yaml +1 -1
- package/evals/git-commit/tasks/positive-trigger.yaml +1 -1
- package/evals/grill-me/tasks/positive-trigger.yaml +1 -1
- package/fable-discipline/SKILL.md +13 -13
- package/fable-discipline/references/discipline-rules.md +4 -4
- package/fable-mode/SKILL.md +2 -2
- package/fable-mode/execution-guardrails/SKILL.md +1 -1
- package/fable-mode/fable-haiku/SKILL.md +1 -1
- package/fable-mode/fable-opus/SKILL.md +2 -2
- package/fable-mode/fable-sonnet/SKILL.md +1 -1
- package/fable-mode/references/execution-phases.md +2 -1
- package/find-skills/SKILL.md +2 -2
- package/find-skills/references/discovery-flow.md +1 -1
- package/git-commit/SKILL.md +14 -14
- package/git-commit/references/commit-flow.md +4 -2
- package/grill-me/SKILL.md +19 -21
- package/grill-me/references/grilling-playbook.md +5 -5
- package/grill-with-docs/SKILL.md +3 -3
- package/grill-with-docs/references/session-playbook.md +4 -4
- package/hooks/scripts/action-gate.js +11 -0
- package/opencode-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
- package/plugins/harness-everything/hooks/scripts/action-gate.js +11 -0
- package/plugins/harness-everything/plugin.json +1 -1
- package/plugins/harness-everything/skills/fable-discipline/SKILL.md +13 -13
- package/plugins/harness-everything/skills/fable-discipline/references/discipline-rules.md +4 -4
- package/plugins/harness-everything/skills/fable-mode/SKILL.md +2 -2
- package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +2 -2
- package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/references/execution-phases.md +2 -1
- package/plugins/harness-everything/skills/find-skills/SKILL.md +2 -2
- package/plugins/harness-everything/skills/find-skills/references/discovery-flow.md +1 -1
- package/plugins/harness-everything/skills/git-commit/SKILL.md +14 -14
- package/plugins/harness-everything/skills/git-commit/references/commit-flow.md +4 -2
- package/plugins/harness-everything/skills/grill-me/SKILL.md +19 -21
- package/plugins/harness-everything/skills/grill-me/references/grilling-playbook.md +5 -5
- package/plugins/harness-everything/skills/grill-with-docs/SKILL.md +3 -3
- package/plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md +4 -4
- package/sbom.cdx.json +7 -7
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"name": "harness-everything",
|
|
11
11
|
"source": "./",
|
|
12
12
|
"description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
|
|
13
|
-
"version": "0.30.
|
|
13
|
+
"version": "0.30.8",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Miya Daniel"
|
|
16
16
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harness-everything",
|
|
3
3
|
"description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
|
|
4
|
-
"version": "0.30.
|
|
4
|
+
"version": "0.30.8",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Miya Daniel"
|
|
7
7
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,58 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.30.8](https://github.com/dyphn1/Harness-everything/compare/v0.30.7...v0.30.8) (2026-10-07)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **fable:** align discipline side effects ([#275](https://github.com/dyphn1/Harness-everything/issues/275) [#277](https://github.com/dyphn1/Harness-everything/issues/277)) ([8aa4c99](https://github.com/dyphn1/Harness-everything/commit/8aa4c99778c7f2c70e3ca434fce9ff34d30e7ea7))
|
|
10
|
+
* **fable:** compact contract and preserve advisory divergence ([81a97ad](https://github.com/dyphn1/Harness-everything/commit/81a97ad82c131f406aa2000bcda15e8819802744))
|
|
11
|
+
* **fable:** make build divergence advisory ([#275](https://github.com/dyphn1/Harness-everything/issues/275)) ([45aa418](https://github.com/dyphn1/Harness-everything/commit/45aa418b596e6bb11f8f9a08e0217923263c7594))
|
|
12
|
+
* **fable:** make commit boundaries permission-aware ([#277](https://github.com/dyphn1/Harness-everything/issues/277)) ([c778dd4](https://github.com/dyphn1/Harness-everything/commit/c778dd4f98b3ac4ecd375e2173d0bc839083b153))
|
|
13
|
+
* **fable:** restore semantic contract strength ([df80aa0](https://github.com/dyphn1/Harness-everything/commit/df80aa0d9dac9391258b990329e816f5c06af826))
|
|
14
|
+
* **fable:** restore Waza-compliant contract structure ([e26ffdf](https://github.com/dyphn1/Harness-everything/commit/e26ffdf68d1e492202e131eeebf57665e0e2c269))
|
|
15
|
+
* **fable:** sync compact contract ([946bb27](https://github.com/dyphn1/Harness-everything/commit/946bb27622f6244d55ddd352955ebe2210878278))
|
|
16
|
+
* **fable:** sync discipline side effects ([#275](https://github.com/dyphn1/Harness-everything/issues/275) [#277](https://github.com/dyphn1/Harness-everything/issues/277)) ([e0205c2](https://github.com/dyphn1/Harness-everything/commit/e0205c2063e745a47a58eb70959bfda67e1eebe2))
|
|
17
|
+
* **fable:** sync divergence contract ([#275](https://github.com/dyphn1/Harness-everything/issues/275)) ([f225241](https://github.com/dyphn1/Harness-everything/commit/f225241fe201f5468d58283396a96b3f703d8160))
|
|
18
|
+
* **fable:** sync permission-aware commits ([#277](https://github.com/dyphn1/Harness-everything/issues/277)) ([78b7a32](https://github.com/dyphn1/Harness-everything/commit/78b7a32ba61f759d82ca8d61e297239062ed713c))
|
|
19
|
+
* **fable:** sync semantic contract strength ([01a665d](https://github.com/dyphn1/Harness-everything/commit/01a665d6f95da0d250e4d080409e0ebba8756af7))
|
|
20
|
+
* **fable:** sync Waza-compliant contract ([74619c0](https://github.com/dyphn1/Harness-everything/commit/74619c00c3f1d76438f168dee1353e9fd4a112ef))
|
|
21
|
+
* **git:** compact authorized commit contract ([cd3a3eb](https://github.com/dyphn1/Harness-everything/commit/cd3a3eb1978778c372be03c4611b50fb570ba802))
|
|
22
|
+
* **git:** require commit authorization ([#277](https://github.com/dyphn1/Harness-everything/issues/277)) ([e91f90c](https://github.com/dyphn1/Harness-everything/commit/e91f90cc472ca0310f3bfdbd4fede3f1c89b6884))
|
|
23
|
+
* **git:** restore MUST SHOULD contract strength ([353ff80](https://github.com/dyphn1/Harness-everything/commit/353ff80ee2a17894b76799e96c6a2128a67aa7ee))
|
|
24
|
+
* **git:** restore Waza-compliant contract structure ([4e0db0a](https://github.com/dyphn1/Harness-everything/commit/4e0db0a173c0fa42695e0cbccf963186dbee1d35))
|
|
25
|
+
* **git:** sync commit authorization ([#277](https://github.com/dyphn1/Harness-everything/issues/277)) ([168fd1f](https://github.com/dyphn1/Harness-everything/commit/168fd1f69eed2f3246ca0eb2b7f5e457a1f8891d))
|
|
26
|
+
* **git:** sync compact commit contract ([f4bd248](https://github.com/dyphn1/Harness-everything/commit/f4bd2487d04e934014acb264275e1b694053364f))
|
|
27
|
+
* **git:** sync MUST SHOULD contract strength ([f2e01f3](https://github.com/dyphn1/Harness-everything/commit/f2e01f32a6174ea14c90751344a9357c32db2b2c))
|
|
28
|
+
* **git:** sync Waza-compliant contract ([dc73922](https://github.com/dyphn1/Harness-everything/commit/dc73922f7a2ac708ae319dfd29d3c57ccccfb3ba))
|
|
29
|
+
* **grill:** compact explicit handoff contract ([8aa0f3e](https://github.com/dyphn1/Harness-everything/commit/8aa0f3effbc523c1951a3f3697cb4939eab01b99))
|
|
30
|
+
* **grill:** preserve explicit docs handoff ([#274](https://github.com/dyphn1/Harness-everything/issues/274)) ([8cc7b4f](https://github.com/dyphn1/Harness-everything/commit/8cc7b4fe84fb628234d2142d4c12d6748aa23bbd))
|
|
31
|
+
* **grill:** preserve explicit spec handoff ([#274](https://github.com/dyphn1/Harness-everything/issues/274)) ([ffd3f45](https://github.com/dyphn1/Harness-everything/commit/ffd3f455c45049437a15c7ca69b686b5a155412c))
|
|
32
|
+
* **grill:** sync compact handoff contract ([900f03a](https://github.com/dyphn1/Harness-everything/commit/900f03a9c0fc6a14d6ce525ae6edd3fab6c27967))
|
|
33
|
+
* **grill:** sync explicit docs handoff ([#274](https://github.com/dyphn1/Harness-everything/issues/274)) ([3501bc5](https://github.com/dyphn1/Harness-everything/commit/3501bc54fb1fc905a366f6f26d816ca9b1157503))
|
|
34
|
+
* **grill:** sync explicit spec handoff ([#274](https://github.com/dyphn1/Harness-everything/issues/274)) ([4bf3c58](https://github.com/dyphn1/Harness-everything/commit/4bf3c58ac7f333eaf3a263ba1c61d5ea9c27a765))
|
|
35
|
+
|
|
36
|
+
## [0.30.7](https://github.com/dyphn1/Harness-everything/compare/v0.30.6...v0.30.7) (2026-10-07)
|
|
37
|
+
|
|
38
|
+
### Bug Fixes
|
|
39
|
+
|
|
40
|
+
* **action-gate:** reject dynamic scratch-target exemptions ([#283](https://github.com/dyphn1/Harness-everything/issues/283)) ([f722968](https://github.com/dyphn1/Harness-everything/commit/f722968021846a804fa8fceaddd9983addff51e7))
|
|
41
|
+
* **action-gate:** use explicit shell-expansion marker check ([f02a105](https://github.com/dyphn1/Harness-everything/commit/f02a105e007104d20cde8fe46d24668624f7b343))
|
|
42
|
+
* **action-gate:** use explicit shell-expansion marker check ([bedf24b](https://github.com/dyphn1/Harness-everything/commit/bedf24b1d2774e1d997f4b5c3f1f5d3c90694311))
|
|
43
|
+
* **fable:** keep advisory replan contract within skill token budget ([b593c49](https://github.com/dyphn1/Harness-everything/commit/b593c49862d779f20919f8f1a7ff72043d76b637))
|
|
44
|
+
* **fable:** keep advisory replan contract within skill token budget ([da6c5e8](https://github.com/dyphn1/Harness-everything/commit/da6c5e8f238d5dcae9632a5db0e71786d7dc5fe7))
|
|
45
|
+
* **fable:** make replan guidance non-blocking ([#273](https://github.com/dyphn1/Harness-everything/issues/273)) ([64de668](https://github.com/dyphn1/Harness-everything/commit/64de668e91300e1c7f68ca07ebb08d87b5595c1c))
|
|
46
|
+
* **fable:** make replan guidance non-blocking ([#273](https://github.com/dyphn1/Harness-everything/issues/273)) ([241cf46](https://github.com/dyphn1/Harness-everything/commit/241cf461baca6a6e739aa5114330ac1e20c0195b))
|
|
47
|
+
* **fable:** make replan guidance non-blocking ([#273](https://github.com/dyphn1/Harness-everything/issues/273)) ([d834d9f](https://github.com/dyphn1/Harness-everything/commit/d834d9fffbae5d40583c1e0e41a1da1f03531382))
|
|
48
|
+
* **fable:** make replan guidance non-blocking ([#273](https://github.com/dyphn1/Harness-everything/issues/273)) ([1430afe](https://github.com/dyphn1/Harness-everything/commit/1430afe9a96a1b849d18982644193bf7251264b1))
|
|
49
|
+
* **fable:** preserve per-stage artifact and pass-check contract ([2c4feaf](https://github.com/dyphn1/Harness-everything/commit/2c4feafd503881296a8b656d2b6c8257db68be41))
|
|
50
|
+
* **fable:** preserve per-stage artifact and pass-check contract ([d88a0b6](https://github.com/dyphn1/Harness-everything/commit/d88a0b6b054ca0810563519eed2a1d494c8b3e15))
|
|
51
|
+
* **fable:** remove remaining two-replan caps from fable references ([63f9263](https://github.com/dyphn1/Harness-everything/commit/63f9263f3dd712c39ec49aa977e0229dc750bb52))
|
|
52
|
+
* **find-skills:** retain authority boundary in reference contract ([#276](https://github.com/dyphn1/Harness-everything/issues/276)) ([9a5ed99](https://github.com/dyphn1/Harness-everything/commit/9a5ed99737be4fe0b8631370379eead2d54f6bf9))
|
|
53
|
+
* **find-skills:** retain authority boundary in reference contract ([#276](https://github.com/dyphn1/Harness-everything/issues/276)) ([3e41033](https://github.com/dyphn1/Harness-everything/commit/3e410339df82dafccd2cef094b00e4efd7f4e2d7))
|
|
54
|
+
* **find-skills:** retain authority boundary in skill contract ([#276](https://github.com/dyphn1/Harness-everything/issues/276)) ([3d01cd7](https://github.com/dyphn1/Harness-everything/commit/3d01cd7633261851529b214dbc01664b2a18a915))
|
|
55
|
+
* **find-skills:** retain authority boundary in skill contract ([#276](https://github.com/dyphn1/Harness-everything/issues/276)) ([2112e3a](https://github.com/dyphn1/Harness-everything/commit/2112e3a04eb3c90786aa3316d2735d24435fc9f0))
|
|
56
|
+
|
|
5
57
|
## [0.30.6](https://github.com/dyphn1/Harness-everything/compare/v0.30.5...v0.30.6) (2026-10-06)
|
|
6
58
|
|
|
7
59
|
### Bug Fixes
|
|
@@ -84,6 +84,20 @@ try {
|
|
|
84
84
|
// fail-open path: the gate cannot prove that the target is scratch space.
|
|
85
85
|
matched(table, 'rm -rf "$S"', 'recursive-delete');
|
|
86
86
|
|
|
87
|
+
// A repository checkout may itself live below os.tmpdir() (e.g. a review worktree).
|
|
88
|
+
// Unknown paths are not proven scratch paths merely because cwd is scratch.
|
|
89
|
+
const scratchCwd = path.join(sessionDir, 'scratch');
|
|
90
|
+
matched(table, 'rm -rf "$S"', 'recursive-delete', 'Bash', scratchCwd);
|
|
91
|
+
matched(table, 'rm -rf "${S}"', 'recursive-delete', 'Bash', scratchCwd);
|
|
92
|
+
matched(table, 'rm -rf "$HOME/important"', 'recursive-delete', 'Bash', scratchCwd);
|
|
93
|
+
matched(table, 'rm -rf "~/important"', 'recursive-delete', 'Bash', scratchCwd);
|
|
94
|
+
matched(table, 'rm -rf "*.txt"', 'recursive-delete', 'Bash', scratchCwd);
|
|
95
|
+
matched(table, 'ri -Recurse -Force "$env:TARGET"', 'powershell-recursive-force-delete', 'PowerShell', scratchCwd);
|
|
96
|
+
matched(table, 'rm -r -fo "%TEMP%/important"', 'powershell-recursive-force-delete', 'PowerShell', scratchCwd);
|
|
97
|
+
// A provably literal scratch path remains allowed even from the same cwd.
|
|
98
|
+
allowed(table, `rm -rf "${path.join(scratchCwd, 'output')}"`, 'Bash', scratchCwd);
|
|
99
|
+
|
|
100
|
+
|
|
87
101
|
console.log('PASS: destructive-command classifier covers confirmed bypasses while suppressing quoted-text false positives');
|
|
88
102
|
} finally {
|
|
89
103
|
fs.rmSync(temp, { recursive: true, force: true });
|
|
@@ -10,6 +10,109 @@ function read(rel) {
|
|
|
10
10
|
return fs.readFileSync(path.join(ROOT, rel), 'utf8');
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
// #273: Fable replan counts are advisory, never execution hard-stops.
|
|
14
|
+
// Only repeated same-signature failures invoke mandatory Rule-of-3 reflection.
|
|
15
|
+
for (const [canonical, packaged] of [
|
|
16
|
+
['fable-mode/SKILL.md', 'plugins/harness-everything/skills/fable-mode/SKILL.md'],
|
|
17
|
+
['fable-mode/fable-opus/SKILL.md', 'plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md'],
|
|
18
|
+
]) {
|
|
19
|
+
const body = read(canonical);
|
|
20
|
+
assert.strictEqual(read(packaged), body, canonical + ' packaged contract matches');
|
|
21
|
+
assert.ok(/advisory replan/i.test(body), canonical + ' must describe replans as advisory');
|
|
22
|
+
assert.ok(/Rule-of-3/i.test(body), canonical + ' must preserve same-signature failure reflection');
|
|
23
|
+
assert.ok(!/at most two (?:full )?replans/i.test(body), canonical + ' must not imply a two-replan hard cap');
|
|
24
|
+
}
|
|
25
|
+
for (const rel of [
|
|
26
|
+
'fable-mode/references/execution-phases.md',
|
|
27
|
+
'plugins/harness-everything/skills/fable-mode/references/execution-phases.md',
|
|
28
|
+
'docs/workflows/fable-mode.md',
|
|
29
|
+
]) {
|
|
30
|
+
assert.ok(!/(?:at most|no more than) two (?:full )?replans/i.test(read(rel)), rel + ' must not imply a two-replan hard cap');
|
|
31
|
+
}
|
|
32
|
+
const orchestratorContract = read('fable-mode/agents/fable-orchestrator.md');
|
|
33
|
+
assert.ok(/maxReplans[\s\S]{0,60}is advisory/i.test(orchestratorContract), 'orchestrator keeps advisory replan guidance');
|
|
34
|
+
assert.ok(/do not block execution/i.test(orchestratorContract), 'orchestrator does not block on replan count');
|
|
35
|
+
|
|
36
|
+
// #275: build divergence is a diagnostic signal, not a second hard-stop.
|
|
37
|
+
// Mandatory blocking/reflection remains limited to Rule-of-3 or permission boundaries.
|
|
38
|
+
const fableDiscipline = read('fable-discipline/SKILL.md');
|
|
39
|
+
assert.strictEqual(read('plugins/harness-everything/skills/fable-discipline/SKILL.md'), fableDiscipline, 'fable-discipline packaged contract matches canonical');
|
|
40
|
+
assert.ok(/divergence is a warning signal/i.test(fableDiscipline), 'fable-discipline must classify divergence as warning guidance');
|
|
41
|
+
assert.ok(/does not hard-stop execution/i.test(fableDiscipline), 'divergence must not create an independent hard stop');
|
|
42
|
+
assert.ok(/Rule-of-3 owns mandatory reflection/i.test(fableDiscipline), 'Rule-of-3 remains the mandatory reflection owner');
|
|
43
|
+
assert.ok(!/HALTS execution immediately/i.test(fableDiscipline), 'fable-discipline must not retain the divergent-build hard halt');
|
|
44
|
+
assert.ok(!/If build errors diverge, HALT/i.test(fableDiscipline), 'fable-discipline must not issue an immediate divergence halt');
|
|
45
|
+
|
|
46
|
+
// #274: grill skills may recommend the explicit publication/ticket commands,
|
|
47
|
+
// but must not auto-invoke state-mutating explicit-only skills.
|
|
48
|
+
const toSpec = read('to-spec/SKILL.md');
|
|
49
|
+
const toTickets = read('to-tickets/SKILL.md');
|
|
50
|
+
assert.ok(/Explicit `?\/to-spec`?; never auto-run/i.test(toSpec), 'to-spec remains explicit-only');
|
|
51
|
+
assert.ok(/Explicit `?\/to-tickets`? only/i.test(toTickets), 'to-tickets remains explicit-only');
|
|
52
|
+
for (const [canonical, packaged] of [
|
|
53
|
+
['grill-me/SKILL.md', 'plugins/harness-everything/skills/grill-me/SKILL.md'],
|
|
54
|
+
['grill-with-docs/SKILL.md', 'plugins/harness-everything/skills/grill-with-docs/SKILL.md'],
|
|
55
|
+
]) {
|
|
56
|
+
const body = read(canonical);
|
|
57
|
+
assert.strictEqual(read(packaged), body, canonical + ' packaged contract matches');
|
|
58
|
+
assert.ok(/explicit `?\/to-spec`?/i.test(body), canonical + ' must surface the explicit to-spec handoff');
|
|
59
|
+
assert.ok(/Never auto-run `to-spec` or `to-tickets`/i.test(body), canonical + ' must preserve explicit-only publication/ticket gates');
|
|
60
|
+
}
|
|
61
|
+
assert.ok(!/on consensus, invoke `to-spec`/i.test(read('grill-me/SKILL.md')), 'grill-me must not auto-invoke to-spec');
|
|
62
|
+
for (const [canonical, packaged] of [
|
|
63
|
+
['grill-me/references/grilling-playbook.md', 'plugins/harness-everything/skills/grill-me/references/grilling-playbook.md'],
|
|
64
|
+
['grill-with-docs/references/session-playbook.md', 'plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md'],
|
|
65
|
+
]) {
|
|
66
|
+
const body = read(canonical);
|
|
67
|
+
assert.strictEqual(read(packaged), body, canonical + ' packaged reference matches');
|
|
68
|
+
assert.ok(/recommend explicit `?\/to-spec`?/i.test(body), canonical + ' keeps explicit specification handoff');
|
|
69
|
+
assert.ok(!/MUST[^\n]*hand off to `to-spec/i.test(body), canonical + ' must not mandate automatic to-spec handoff');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
for (const rel of [
|
|
73
|
+
'docs/workflows/grill-me.md',
|
|
74
|
+
'docs/workflows/grill-with-docs.md',
|
|
75
|
+
]) {
|
|
76
|
+
const body = read(rel);
|
|
77
|
+
assert.ok(/suggest|recommend/i.test(body) && /explicit `?\/to-spec`?/i.test(body), rel + ' must recommend an explicit to-spec command');
|
|
78
|
+
assert.ok(/explicit `?\/to-spec`? invocation/i.test(body), rel + ' must preserve the explicit invocation gate');
|
|
79
|
+
assert.ok(/not auto-run|does not invoke|not auto-invoked|does not publish automatically/i.test(body), rel + ' must reject automatic explicit-only handoff');
|
|
80
|
+
assert.ok(!/On consensus, `?to-spec`? invoked/i.test(body), rel + ' must not auto-invoke to-spec on consensus');
|
|
81
|
+
assert.ok(!/aligned design to `?to-spec`?; execution to `?to-tickets/i.test(body), rel + ' must not encode automatic downstream handoff');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
// #277: completing a task phase does not authorize a Git commit.
|
|
87
|
+
// Commit boundaries are guidance unless the user or active host/workflow grants permission.
|
|
88
|
+
const gitCommit = read('git-commit/SKILL.md');
|
|
89
|
+
const gitCommitFlow = read('git-commit/references/commit-flow.md');
|
|
90
|
+
const fableDisciplineRules = read('fable-discipline/references/discipline-rules.md');
|
|
91
|
+
assert.strictEqual(read('plugins/harness-everything/skills/git-commit/SKILL.md'), gitCommit, 'git-commit packaged contract matches canonical');
|
|
92
|
+
assert.strictEqual(read('plugins/harness-everything/skills/git-commit/references/commit-flow.md'), gitCommitFlow, 'git-commit packaged flow matches canonical');
|
|
93
|
+
assert.strictEqual(read('plugins/harness-everything/skills/fable-discipline/references/discipline-rules.md'), fableDisciplineRules, 'fable-discipline packaged rules match canonical');
|
|
94
|
+
assert.ok(/task phase alone is not authorization/i.test(gitCommit), 'phase completion must not authorize a commit');
|
|
95
|
+
assert.ok(/commit authorization first/i.test(gitCommit), 'git-commit must gate mutation on authorization');
|
|
96
|
+
assert.ok(/User \/ Host-Authorized Commit/i.test(gitCommitFlow), 'commit flow must begin from explicit authorization');
|
|
97
|
+
assert.ok(/Do Not Commit; Surface Status/i.test(gitCommitFlow), 'unauthorized flow must stop before mutation');
|
|
98
|
+
assert.ok(/commits are authorized/i.test(fableDiscipline), 'fable discipline only applies atomic commits after authorization');
|
|
99
|
+
assert.ok(/otherwise leave changes uncommitted/i.test(fableDiscipline), 'fable discipline must preserve uncommitted state without authorization');
|
|
100
|
+
assert.ok(/Create the commit only when the user or active host\/workflow has authorized commits/i.test(fableDisciplineRules), 'fable reference must not autonomously commit');
|
|
101
|
+
assert.ok(!/explicit commit requests or concluded task phases/i.test(gitCommit), 'concluded phases must not remain a commit trigger');
|
|
102
|
+
assert.ok(!/Trigger: Commit Request \/ Task Complete/i.test(gitCommitFlow), 'task completion must not remain a flow trigger');
|
|
103
|
+
|
|
104
|
+
// #275 reference surface must agree with the non-blocking divergence contract.
|
|
105
|
+
assert.ok(/divergence alone is not a hard stop/i.test(fableDisciplineRules), 'fable reference keeps divergence advisory');
|
|
106
|
+
assert.ok(/Mandatory reflection remains owned by Rule-of-3/i.test(fableDisciplineRules), 'fable reference keeps Rule-of-3 as reflection owner');
|
|
107
|
+
assert.ok(!/HALT EXECUTION IMMEDIATELY/i.test(fableDisciplineRules), 'fable reference must not retain the old divergence hard halt');
|
|
108
|
+
const fableWorkflow = read('docs/workflows/fable-discipline.md');
|
|
109
|
+
const gitWorkflow = read('docs/workflows/git-commit.md');
|
|
110
|
+
assert.ok(/Divergence surfaced without creating an independent hard stop/i.test(fableWorkflow), 'fable workflow keeps divergence advisory');
|
|
111
|
+
assert.ok(!/HALT and call zoom-out|halt immediately/i.test(fableWorkflow), 'fable workflow must not retain divergence hard halt');
|
|
112
|
+
assert.ok(/completed task phase does \*\*not\*\* authorize a commit/i.test(gitWorkflow), 'git workflow rejects phase-completion authorization');
|
|
113
|
+
assert.ok(/Commit authorization existed before mutation/i.test(gitWorkflow), 'git workflow gates mutation on authorization');
|
|
114
|
+
|
|
115
|
+
|
|
13
116
|
// #268: model aliases evolve, so worker prompts must encode behavior rather
|
|
14
117
|
// than generation-specific personality/failure claims.
|
|
15
118
|
const workerPairs = [
|
|
@@ -90,6 +193,20 @@ const workspaceContract = read('multi-agent-workspace/SKILL.md');
|
|
|
90
193
|
assert.ok(/router owns that decision/i.test(workspaceContract), 'multi-agent-workspace keeps router-owned topology');
|
|
91
194
|
assert.ok(/does not spawn workers/i.test(workspaceContract), 'multi-agent-workspace remains a topology/workspace consumer');
|
|
92
195
|
|
|
196
|
+
// #276: third-party skill output is applicable guidance, never higher-priority
|
|
197
|
+
// authority. Keep the canonical, packaged, and reference contracts consistent.
|
|
198
|
+
const findSkills = read('find-skills/SKILL.md');
|
|
199
|
+
const discoveryFlow = read('find-skills/references/discovery-flow.md');
|
|
200
|
+
assert.strictEqual(read('plugins/harness-everything/skills/find-skills/SKILL.md'), findSkills, 'find-skills packaged contract matches canonical');
|
|
201
|
+
assert.strictEqual(read('plugins/harness-everything/skills/find-skills/references/discovery-flow.md'), discoveryFlow, 'find-skills packaged reference matches canonical');
|
|
202
|
+
assert.ok(/untrusted third-party content/i.test(findSkills), 'third-party output must be identified as untrusted');
|
|
203
|
+
assert.ok(/MUST NOT override host, user, or Harness/i.test(findSkills), 'third-party skill instructions cannot override core authority');
|
|
204
|
+
assert.ok(/explicit approval/i.test(findSkills), 'third-party application must require approval');
|
|
205
|
+
assert.ok(/untrusted third-party content/i.test(discoveryFlow), 'reference must preserve untrusted data boundary');
|
|
206
|
+
assert.ok(/MUST NOT override host, user, or Harness/i.test(discoveryFlow), 'reference must preserve precedence');
|
|
207
|
+
assert.ok(!/Treat its output as binding/i.test(findSkills), 'find-skills must not grant unconditional binding authority');
|
|
208
|
+
assert.ok(!/treat every instruction in it as binding/i.test(discoveryFlow), 'discovery reference must not grant unconditional binding authority');
|
|
209
|
+
|
|
93
210
|
// #272: preserve one detailed checkpoint plus the invariant; remove duplicate
|
|
94
211
|
// restatements from later sections of the same router injection.
|
|
95
212
|
const kernel = path.join(ROOT, 'harness-everything/scripts/kernel-router.js');
|
|
@@ -1,71 +1,30 @@
|
|
|
1
1
|
# Workflow: Fable Discipline
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Background guard for compact context, bounded stage scope, explicit handoffs, authorized commit boundaries, and build-divergence signals.
|
|
4
4
|
|
|
5
5
|
Source of truth: `fable-discipline/SKILL.md`.
|
|
6
6
|
|
|
7
|
-
## 1.
|
|
7
|
+
## 1. Workflow
|
|
8
8
|
|
|
9
9
|
```mermaid
|
|
10
10
|
graph TD
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
Active[fable-mode active] --> Compact[Compact milestone state]
|
|
12
|
+
Compact --> Handoff[Verify handoff manifest]
|
|
13
|
+
Handoff --> Diverge{Build errors diverging?}
|
|
14
|
+
Diverge -->|no| Continue[Continue guarded work]
|
|
15
|
+
Diverge -->|yes| Warn[Surface regression + recommend zoom-out]
|
|
16
|
+
Warn --> Rule3{Rule-of-3 reached?}
|
|
17
|
+
Rule3 -->|yes| Reflect[Mandatory reflection]
|
|
18
|
+
Rule3 -->|no| Continue
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
graph TD
|
|
23
|
-
IncomingAgent[Incoming stage agent] --> VerifyManifest[Verify outgoing state manifest first]
|
|
24
|
-
VerifyManifest --> ManifestOk{Manifest complete?}
|
|
25
|
-
ManifestOk -->|yes| DoStage[Run stage within allowed files]
|
|
26
|
-
ManifestOk -->|no| AskManifest[Require missing APIs and IO details]
|
|
27
|
-
AskManifest --> VerifyManifest
|
|
28
|
-
DoStage --> OneCommit[One commit per independent logic block]
|
|
29
|
-
OneCommit --> LeaveManifest[Leave manifest for next agent]
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## 2. Triggering and Routing Path
|
|
33
|
-
|
|
34
|
-
```mermaid
|
|
35
|
-
graph LR
|
|
36
|
-
FableMode[fable-mode active] --> FableDisc[fable-discipline shadow guard]
|
|
37
|
-
FableDisc --> WorkspaceGuard[Constrain multi-agent-workspace mutations]
|
|
38
|
-
WorkspaceGuard --> FableMode
|
|
39
|
-
FableDisc --> DivergedBuild{Diverging build errors?}
|
|
40
|
-
DivergedBuild -->|yes| ZoomOut[zoom-out]
|
|
41
|
-
DivergedBuild -->|no| FableMode
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## 3. Real-World Use Case
|
|
45
|
-
|
|
46
|
-
Long architectural migration runs under `fable-mode` with sub-agents handling separate stages.
|
|
47
|
-
|
|
48
|
-
1. After each milestone, compact decisions and drop unneeded history; avoid broad regex and avoid reading irrelevant files over 1000 lines.
|
|
49
|
-
2. Confirm working directory before touching core architecture; keep one commit per independent logic block.
|
|
50
|
-
3. Outgoing agent leaves a manifest with completed APIs and expected inputs/outputs; incoming agent verifies it first.
|
|
51
|
-
4. If fixes create more breakage, halt immediately, call `zoom-out`, and map the error dependency graph instead of continued patching.
|
|
52
|
-
|
|
53
|
-
```mermaid
|
|
54
|
-
graph TD
|
|
55
|
-
LongTask[Migration stage completes] --> CompactState[Compact milestone state]
|
|
56
|
-
CompactState --> CheckBloat[Check for bloat or oversized reads]
|
|
57
|
-
CheckBloat --> Handoff[Write and verify handoff manifest]
|
|
58
|
-
Handoff --> BuildCheck{Build diverging?}
|
|
59
|
-
BuildCheck -->|yes| HaltNow[HALT and zoom-out]
|
|
60
|
-
BuildCheck -->|no| NextStage[Start next stage guarded]
|
|
61
|
-
```
|
|
21
|
+
Commit boundaries are guidance only. Create commits only when the user or active host/workflow has authorized them; otherwise leave changes uncommitted.
|
|
62
22
|
|
|
63
|
-
##
|
|
23
|
+
## 2. Verification
|
|
64
24
|
|
|
65
|
-
- [ ]
|
|
66
|
-
- [ ]
|
|
67
|
-
- [ ]
|
|
68
|
-
- [ ]
|
|
69
|
-
- [ ]
|
|
70
|
-
- [ ]
|
|
71
|
-
- [ ] Detail followed `fable-discipline/references/discipline-rules.md` where needed
|
|
25
|
+
- [ ] Milestone state compacted and irrelevant broad reads avoided.
|
|
26
|
+
- [ ] Handoff manifest written and verified.
|
|
27
|
+
- [ ] Divergence surfaced without creating an independent hard stop.
|
|
28
|
+
- [ ] Rule-of-3 remains the mandatory reflection owner.
|
|
29
|
+
- [ ] Commits occur only with user/host authorization.
|
|
30
|
+
- [ ] Detail follows `fable-discipline/references/discipline-rules.md`.
|
|
@@ -84,7 +84,7 @@ worker. A material confirmed blocker may stop the current stage immediately. Rep
|
|
|
84
84
|
matching execution failures use the separate Rule-of-3 path: zoom out, reflect, then
|
|
85
85
|
`RESUME` on a new approach or `ESCALATE` when a real decision is required.
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
Replan counts (`maxReplans`) are advisory and never halt execution on their own; unresolved blockers are escalated rather than hidden behind endless restructuring, and three same-signature failures still trigger the mandatory Rule-of-3 `zoom-out`.
|
|
88
88
|
|
|
89
89
|
## 5. Completion Boundary
|
|
90
90
|
|
|
@@ -1,79 +1,33 @@
|
|
|
1
1
|
# Workflow: Git Commit
|
|
2
2
|
|
|
3
|
-
> Create
|
|
3
|
+
> Create and verify an Angular-style commit only after the user or active host/workflow authorizes the mutation.
|
|
4
4
|
|
|
5
5
|
Source of truth: `git-commit/SKILL.md`.
|
|
6
6
|
|
|
7
|
-
## 1.
|
|
7
|
+
## 1. Workflow
|
|
8
8
|
|
|
9
9
|
```mermaid
|
|
10
10
|
graph TD
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
StagedOk -->|yes| FormatMsg[Format type-scope-subject message]
|
|
22
|
-
PromptStage --> FormatMsg
|
|
23
|
-
FormatMsg --> VerifyLog[Commit then verify with git log -1]
|
|
24
|
-
VerifyLog --> DoneClean([Tree updated and clean])
|
|
11
|
+
Trigger[Commit requested / host-authorized] --> Auth{Commit authorized?}
|
|
12
|
+
Auth -->|no| Stop[Do not commit; surface status]
|
|
13
|
+
Auth -->|yes| Status[git status]
|
|
14
|
+
Status --> Diff[git diff --cached]
|
|
15
|
+
Diff --> Staged{Anything staged?}
|
|
16
|
+
Staged -->|no| Ask[Prompt user; stage only authorized targets]
|
|
17
|
+
Staged -->|yes| Format[Format Angular message]
|
|
18
|
+
Ask --> Format
|
|
19
|
+
Format --> Commit[git commit]
|
|
20
|
+
Commit --> Verify[git log -1]
|
|
25
21
|
```
|
|
26
22
|
|
|
27
|
-
|
|
28
|
-
graph TD
|
|
29
|
-
FormatSimple[Formatted Angular message] --> EscCheck{Simple single line?}
|
|
30
|
-
EscCheck -->|yes| DirectM[git commit -m]
|
|
31
|
-
EscCheck -->|no multiline or Windows| TempF[Write commit-msg file then git commit -F and cleanup]
|
|
32
|
-
DirectM --> LogOne[git log -1 verifies commit]
|
|
33
|
-
TempF --> LogOne
|
|
34
|
-
LogOne --> CleanTree([Working tree clean])
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## 2. Triggering and Routing Path
|
|
38
|
-
|
|
39
|
-
```mermaid
|
|
40
|
-
graph LR
|
|
41
|
-
UserReq[User requests commit] --> GitSkill[git-commit SKILL]
|
|
42
|
-
PhaseDone[Task phase concludes with staged diff] --> GitSkill
|
|
43
|
-
GitSkill --> StatusGate[git status gate]
|
|
44
|
-
StatusGate --> SubGuide[guides SUBMODULES.md if needed]
|
|
45
|
-
SubGuide --> StyleGuide[guides ANGULAR_STYLE.md formatting]
|
|
46
|
-
StyleGuide --> CommitVerify[Commit and git log -1 check]
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## 3. Real-World Use Case
|
|
50
|
-
|
|
51
|
-
Developer finishes an auth fix and asks for a commit.
|
|
52
|
-
|
|
53
|
-
1. Run `git status`; if not a repo, offer `git init` or skip.
|
|
54
|
-
2. If submodules changed, commit those first per `git-commit/guides/SUBMODULES.md`.
|
|
55
|
-
3. Run `git diff --cached`; if nothing staged, prompt before staging targeted files.
|
|
56
|
-
4. Format `<type>(<scope>): <subject>` per `git-commit/guides/ANGULAR_STYLE.md`.
|
|
57
|
-
5. Use `git commit -m` for a simple line, or `.git-commit-msg.txt` + `git commit -F` with cleanup for multiline/Windows, then verify with `git log -1`.
|
|
58
|
-
|
|
59
|
-
```mermaid
|
|
60
|
-
graph TD
|
|
61
|
-
DevDone[Auth fix finished and staged] --> CheckStatus[Run git status and cached diff]
|
|
62
|
-
CheckStatus --> FmtMsg[Format feat-auth style message]
|
|
63
|
-
FmtMsg --> PickMethod{Multiline or Windows?}
|
|
64
|
-
PickMethod -->|no| CommitM[git commit -m]
|
|
65
|
-
PickMethod -->|yes| CommitF[git commit -F with temp file]
|
|
66
|
-
CommitM --> VerifyOne[git log -1]
|
|
67
|
-
CommitF --> VerifyOne
|
|
68
|
-
VerifyOne --> CleanDone([Committed and verified])
|
|
69
|
-
```
|
|
23
|
+
A completed task phase does **not** authorize a commit.
|
|
70
24
|
|
|
71
|
-
##
|
|
25
|
+
## 2. Verification
|
|
72
26
|
|
|
73
|
-
- [ ]
|
|
74
|
-
- [ ]
|
|
75
|
-
- [ ]
|
|
76
|
-
- [ ] Message
|
|
77
|
-
- [ ]
|
|
78
|
-
- [ ] No branch
|
|
79
|
-
- [ ] Detail
|
|
27
|
+
- [ ] Commit authorization existed before mutation.
|
|
28
|
+
- [ ] `git status` and `git diff --cached` were inspected.
|
|
29
|
+
- [ ] Only authorized targeted files were staged.
|
|
30
|
+
- [ ] Message follows `<type>(<scope>): <subject>`.
|
|
31
|
+
- [ ] Result verified with `git log -1`.
|
|
32
|
+
- [ ] No branch/rebase/merge/push side effects were introduced.
|
|
33
|
+
- [ ] Detail follows `git-commit/references/commit-flow.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Workflow: Grill Me
|
|
2
2
|
|
|
3
|
-
> A demanding challenger that pressure-tests vague plans and architectures one question at a time,
|
|
3
|
+
> A demanding challenger that pressure-tests vague plans and architectures one question at a time, keeps the CONTEXT.md glossary current, and recommends an explicit `/to-spec` handoff after consensus.
|
|
4
4
|
|
|
5
5
|
Source of truth: `grill-me/SKILL.md`.
|
|
6
6
|
|
|
@@ -15,8 +15,11 @@ graph TD
|
|
|
15
15
|
ResolveBranch --> UpdateGlossary["Update CONTEXT.md glossary inline"]
|
|
16
16
|
UpdateGlossary --> ConsensusCheck{"Consensus on all branches?"}
|
|
17
17
|
ConsensusCheck -->|No| AskOne
|
|
18
|
-
ConsensusCheck -->|Yes|
|
|
19
|
-
|
|
18
|
+
ConsensusCheck -->|Yes| SuggestSpec["Recommend explicit /to-spec"]
|
|
19
|
+
SuggestSpec --> InvokeSpec{"User explicitly invokes /to-spec?"}
|
|
20
|
+
InvokeSpec -->|No| Await["Keep aligned decisions; await explicit command"]
|
|
21
|
+
InvokeSpec -->|Yes| ToSpec["to-spec previews outline and publishes under its approval gate"]
|
|
22
|
+
ToSpec --> SuggestExec["Suggest /to-tickets, fable-mode, or tdd as appropriate"]
|
|
20
23
|
```
|
|
21
24
|
|
|
22
25
|
## 2. Triggering and Routing Path
|
|
@@ -26,10 +29,11 @@ graph LR
|
|
|
26
29
|
VaguePlan["Input: vague plan proposal"] --> GrillMe["grill-me / SKILL.md"]
|
|
27
30
|
EvaluateArch["Input: evaluate architecture request"] --> GrillMe
|
|
28
31
|
ExplicitAsk["Input: explicit grill me request"] --> GrillMe
|
|
29
|
-
GrillMe -->
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
GrillMe --> SuggestSpec["Suggest explicit /to-spec"]
|
|
33
|
+
SuggestSpec --> InvokeGate{"Explicit /to-spec invoked?"}
|
|
34
|
+
InvokeGate -->|No| Wait["Stop at recommendation"]
|
|
35
|
+
InvokeGate -->|Yes| ToSpec["to-spec preview / publication flow"]
|
|
36
|
+
ToSpec --> SuggestRoutes["Suggest /to-tickets, fable-mode, or tdd"]
|
|
33
37
|
```
|
|
34
38
|
|
|
35
39
|
## 3. Real-World Use Case
|
|
@@ -42,10 +46,13 @@ graph TD
|
|
|
42
46
|
A1 --> Glossary1["Update CONTEXT.md glossary for sync and lock terms"]
|
|
43
47
|
Glossary1 --> Q2["Q2: What are boundary conditions for partial state?"]
|
|
44
48
|
Q2 --> Consensus["Consensus reached on failure and boundary handling"]
|
|
45
|
-
Consensus -->
|
|
49
|
+
Consensus --> Recommend["Recommend explicit /to-spec"]
|
|
50
|
+
Recommend --> UserInvoke{"User invokes /to-spec?"}
|
|
51
|
+
UserInvoke -->|No| End["Preserve consensus; no publication"]
|
|
52
|
+
UserInvoke -->|Yes| Spec["to-spec previews and publishes ADR/spec"]
|
|
46
53
|
```
|
|
47
54
|
|
|
48
|
-
Concrete example: a developer proposes a direct table-sync cron job. `grill-me`
|
|
55
|
+
Concrete example: a developer proposes a direct table-sync cron job. `grill-me` resolves the design one question at a time and updates glossary terms. Once consensus is reached, it recommends explicit `/to-spec`; it does not publish automatically. Only after that command is invoked does `to-spec` enter its preview/publication flow. Any later execution route is suggested rather than auto-invoked.
|
|
49
56
|
|
|
50
57
|
Deep detail: `grill-me/references/grilling-playbook.md`.
|
|
51
58
|
|
|
@@ -54,7 +61,8 @@ Deep detail: `grill-me/references/grilling-playbook.md`.
|
|
|
54
61
|
- [ ] Exactly ONE question asked at a time; questionnaires prohibited
|
|
55
62
|
- [ ] Each question carries the agent's insight and its branch is resolved before advancing
|
|
56
63
|
- [ ] Questions use the project's domain model and terminology from `CONTEXT.md`, `README.md`, and `docs/adr/`
|
|
57
|
-
- [ ] `CONTEXT.md` glossary updated inline as terms resolve
|
|
58
|
-
- [ ] On consensus,
|
|
59
|
-
- [ ]
|
|
64
|
+
- [ ] `CONTEXT.md` glossary updated inline as terms resolve
|
|
65
|
+
- [ ] On consensus, explicit `/to-spec` is recommended, not auto-run
|
|
66
|
+
- [ ] Publication occurs only after explicit `/to-spec` invocation and its approval flow
|
|
67
|
+
- [ ] Execution routes such as `/to-tickets`, `fable-mode`, or `tdd` are suggested; explicit-only skills are not auto-invoked
|
|
60
68
|
- [ ] Not used for casual Q and A, direct spec writing, or ticket breakdown of an approved spec
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Workflow: Grill With Docs
|
|
2
2
|
|
|
3
|
-
> Tests a plan against
|
|
3
|
+
> Tests a plan against recorded domain language and decisions, sharpens terminology, updates CONTEXT.md/ADRs inline, and recommends explicit downstream commands after alignment.
|
|
4
4
|
|
|
5
5
|
Source of truth: `grill-with-docs/SKILL.md`.
|
|
6
6
|
|
|
@@ -15,8 +15,12 @@ graph TD
|
|
|
15
15
|
InlineUpdate --> ADRGate{"ADR warranted: hard to reverse plus surprising without context plus real trade-off?"}
|
|
16
16
|
ADRGate -->|Yes| WriteADR["Offer and write ADR at resolved location"]
|
|
17
17
|
ADRGate -->|No| SkipADR["Skip ADR; keep pure glossary"]
|
|
18
|
-
WriteADR -->
|
|
19
|
-
SkipADR -->
|
|
18
|
+
WriteADR --> SuggestSpec["Recommend explicit /to-spec"]
|
|
19
|
+
SkipADR --> SuggestSpec
|
|
20
|
+
SuggestSpec --> InvokeSpec{"User explicitly invokes /to-spec?"}
|
|
21
|
+
InvokeSpec -->|No| Await["Keep aligned design; await explicit command"]
|
|
22
|
+
InvokeSpec -->|Yes| ToSpec["to-spec enters preview / publication flow"]
|
|
23
|
+
ToSpec --> SuggestExec["Suggest /to-tickets, fable-mode, or tdd as appropriate"]
|
|
20
24
|
```
|
|
21
25
|
|
|
22
26
|
## 2. Triggering and Routing Path
|
|
@@ -24,11 +28,12 @@ graph TD
|
|
|
24
28
|
```mermaid
|
|
25
29
|
graph LR
|
|
26
30
|
DomainStress["Input: stress-testing a plan against domain language and documented decisions"] --> GWD["grill-with-docs / SKILL.md"]
|
|
27
|
-
GWD --> GrillMe["grill-me for unverified design"]
|
|
28
|
-
GWD -->
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
GWD --> GrillMe["Recommend grill-me for unverified design"]
|
|
32
|
+
GWD --> SuggestSpec["For aligned design, suggest explicit /to-spec"]
|
|
33
|
+
SuggestSpec --> InvokeGate{"Explicit /to-spec invoked?"}
|
|
34
|
+
InvokeGate -->|No| Wait["Stop at recommendation"]
|
|
35
|
+
InvokeGate -->|Yes| ToSpec["to-spec preview / publication flow"]
|
|
36
|
+
ToSpec --> SuggestRoutes["Suggest /to-tickets, fable-mode, or tdd"]
|
|
32
37
|
```
|
|
33
38
|
|
|
34
39
|
## 3. Real-World Use Case
|
|
@@ -40,10 +45,13 @@ graph TD
|
|
|
40
45
|
Conflict --> Scenario["Scenario test: burst retry against overload protection limit"]
|
|
41
46
|
Scenario --> GlossaryFix["Inline glossary fix to canonical terms"]
|
|
42
47
|
GlossaryFix --> ADRDecision["ADR offered because limit change is hard to reverse and involves trade-off"]
|
|
43
|
-
ADRDecision -->
|
|
48
|
+
ADRDecision --> Recommend["Recommend explicit /to-spec; suggest execution routes separately"]
|
|
49
|
+
Recommend --> Invoke{"User invokes /to-spec?"}
|
|
50
|
+
Invoke -->|No| End["Keep aligned design; no spec publication"]
|
|
51
|
+
Invoke -->|Yes| Spec["to-spec preview / publication flow"]
|
|
44
52
|
```
|
|
45
53
|
|
|
46
|
-
Concrete example: a retry-limit change is checked against the existing rate-limiting ADR and code. Fuzzy
|
|
54
|
+
Concrete example: a retry-limit change is checked against the existing rate-limiting ADR and code. Fuzzy language is sharpened and the glossary is fixed inline. Once alignment is complete, the skill recommends explicit `/to-spec`; it does not invoke publication or ticket generation automatically. An unverified design is directed back to `grill-me` first.
|
|
47
55
|
|
|
48
56
|
Deep detail: `grill-with-docs/references/session-playbook.md`. Formats: `grill-with-docs/ADR-FORMAT.md`, `grill-with-docs/CONTEXT-FORMAT.md`.
|
|
49
57
|
|
|
@@ -54,6 +62,7 @@ Deep detail: `grill-with-docs/references/session-playbook.md`. Formats: `grill-w
|
|
|
54
62
|
- [ ] Relationships tested with concrete scenarios and claims cross-checked against code
|
|
55
63
|
- [ ] Context glossary updated inline, never batched
|
|
56
64
|
- [ ] ADR offered only when hard to reverse plus surprising without context plus a real trade-off
|
|
57
|
-
- [ ]
|
|
58
|
-
- [ ]
|
|
65
|
+
- [ ] After alignment, explicit `/to-spec` is recommended rather than auto-run
|
|
66
|
+
- [ ] Specification publication requires explicit `/to-spec` invocation
|
|
67
|
+
- [ ] `/to-tickets`, `fable-mode`, and `tdd` are suggestions; explicit-only skills are not auto-invoked
|
|
59
68
|
- [ ] Not used for verifying unstable designs without a grilling pass, and not used for spec publishing without grilling
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: positive-fable-discipline-001
|
|
2
2
|
name: On-scope prompt triggers fable-discipline
|
|
3
|
-
description:
|
|
3
|
+
description: Enforce fable-mode context discipline as a shadow guard. Use for staged multi-agent loops to compact state, constrain stage scope, verify handoffs, and surface build divergence without adding an independent hard stop.
|
|
4
4
|
tags:
|
|
5
5
|
- positive-trigger
|
|
6
6
|
inputs:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: positive-git-commit-001
|
|
2
2
|
name: On-scope prompt triggers git-commit
|
|
3
|
-
description: "Generate Angular-style commit messages after verifying
|
|
3
|
+
description: "Generate Angular-style commit messages after verifying repo state, submodules, and staged files. Use only for a user-requested or host/workflow-authorized commit; task completion alone is not authorization."
|
|
4
4
|
tags:
|
|
5
5
|
- positive-trigger
|
|
6
6
|
inputs:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: positive-grill-me-001
|
|
2
2
|
name: On-scope prompt triggers grill-me
|
|
3
|
-
description:
|
|
3
|
+
description: Stress-test plans and architectures one question at a time, expose blind spots, update domain terminology, and suggest an explicit to-spec handoff when alignment is complete.
|
|
4
4
|
tags:
|
|
5
5
|
- positive-trigger
|
|
6
6
|
inputs:
|