rcf-lite 0.10.0 → 0.11.0
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/CHANGELOG.md +9 -0
- package/fixtures/canary-manifest.json +9 -9
- package/guidance/build-cycle-playbook.md +57 -0
- package/guidance/harness-template.md +42 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +42 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,15 @@ All notable changes to this project are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Pre-1.0, breaking changes are signalled by a minor version bump.
|
|
6
6
|
|
|
7
|
+
## [0.11.0] - 2026-08-27
|
|
8
|
+
|
|
9
|
+
Guidance-only release: the agent-side driving playbook. No CLI, schema, or runtime behaviour changes.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Guidance pack: three new rules in the canonical agent-instructions block, mirrored into the harness template. RULE 11: validate the chain before you act on it (pre-action `rcf define validate` as an unprompted reflex). RULE 12: surface method findings in the operator's language (plain intent, no method vocabulary unless the operator uses it first). RULE 13: the method's failure modes are agent-side self-checks, not operator-side diagnostics.
|
|
14
|
+
- Build-cycle playbook section 18 ("The driving playbook: method is yours, not the operator's") carrying the per-stage depth for the three rules.
|
|
15
|
+
|
|
7
16
|
## [0.10.0] - 2026-08-26
|
|
8
17
|
|
|
9
18
|
The CLI is reorganised around the five RCF tool groups. Every previously-shipped verb keeps its handler; only the invocation shape changes. Clean break: no aliases, no deprecation shims, no back-compat fallbacks. The legacy standalone `rcf-verify` bin is deleted; the verify suite lives at `rcf verify <verb>` inside the umbrella `rcf` CLI.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"registerCanary": [
|
|
3
3
|
{
|
|
4
|
-
"id": "rc-2026-08-
|
|
5
|
-
"createdAt": "2026-08-
|
|
6
|
-
"buildVersion": "0.
|
|
4
|
+
"id": "rc-2026-08-27-001",
|
|
5
|
+
"createdAt": "2026-08-27T14:25:40.313Z",
|
|
6
|
+
"buildVersion": "0.11.0-mockdriver",
|
|
7
7
|
"fixturePromptId": "canary-prompt-01",
|
|
8
8
|
"responseWordCount": 55,
|
|
9
9
|
"grades": {
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"shipDespiteFailReason": "mock canary driver used; no real subagent was dispatched. This record verifies canary infrastructure only, not the register itself."
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
|
-
"id": "rc-2026-08-
|
|
38
|
-
"createdAt": "2026-08-
|
|
39
|
-
"buildVersion": "0.
|
|
37
|
+
"id": "rc-2026-08-27-002",
|
|
38
|
+
"createdAt": "2026-08-27T14:25:40.313Z",
|
|
39
|
+
"buildVersion": "0.11.0-mockdriver",
|
|
40
40
|
"fixturePromptId": "canary-prompt-02",
|
|
41
41
|
"responseWordCount": 55,
|
|
42
42
|
"grades": {
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
"shipDespiteFailReason": "mock canary driver used; no real subagent was dispatched. This record verifies canary infrastructure only, not the register itself."
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
"id": "rc-2026-08-
|
|
71
|
-
"createdAt": "2026-08-
|
|
72
|
-
"buildVersion": "0.
|
|
70
|
+
"id": "rc-2026-08-27-003",
|
|
71
|
+
"createdAt": "2026-08-27T14:25:40.314Z",
|
|
72
|
+
"buildVersion": "0.11.0-mockdriver",
|
|
73
73
|
"fixturePromptId": "canary-prompt-03",
|
|
74
74
|
"responseWordCount": 55,
|
|
75
75
|
"grades": {
|
|
@@ -490,3 +490,60 @@ The queue, the bundles, the referee outputs and this playbook are your working v
|
|
|
490
490
|
- **Escalations lead with the decision.** Section 8's report shape is the content; deliver it in plain language, options short enough to choose between, one decision per message.
|
|
491
491
|
- **Check before you ask, and remember what you were granted.** Git state, remotes, CI status: run the command rather than asking. Permissions already given (branching, pushing, raising PRs): act on them; re-asking reads as not listening.
|
|
492
492
|
- **Confidence, honestly.** The operator steers; you drive the queue. Say what you are doing, not what the method requires of you, and say plainly when something is genuinely blocked - which is exactly when the operator must hear from you.
|
|
493
|
+
|
|
494
|
+
## 18. The driving playbook: method is yours, not the operator's
|
|
495
|
+
|
|
496
|
+
The three sections above (16 fresh-context self-review, 17 register) describe things the agent does. This section is why: the method's discipline runs on the driving side of the conversation, not the operator's. The operator states intent in plain words and expects to be guided; every method-shaped check, every chain-shaped finding, every named failure mode is the agent's job to carry out and translate. A build that only works because a non-technical operator noticed a missing acceptance criterion was, from the method's point of view, a broken build. Three behaviours make that concrete.
|
|
497
|
+
|
|
498
|
+
### 18.1 Validate the chain before you act on it
|
|
499
|
+
|
|
500
|
+
What good looks like:
|
|
501
|
+
|
|
502
|
+
- Every session boot runs `rcf define validate` before the first substantive turn, without the operator asking. A broken tree is reported to the operator in plain intent (18.2) and cleared before anything else. This is the "Session start" line from the harness fragment, taken seriously as a reflex rather than a suggestion.
|
|
503
|
+
- Every chain-touching operation runs the check that fits it, ahead of the operation, not after. Before `rcf build bundle --next`: `rcf define validate`. Before authoring or editing tree documents: `rcf define validate` on the current tree, so you start from a known-clean baseline. Before marking a stage complete: the referee output that gates that stage's exit. Before running a build spec you already hold: a fresh `rcf define validate` on the current state, because the tree may have moved since the bundle was fetched.
|
|
504
|
+
- On a scope-limited operation, run the scope-limited check first. `rcf audit coverage <us-id> --strict` before touching a story's tests; `rcf audit trace <ac-id>` before editing an AC with dependents. The tree-wide command is the default; a scope id narrows the read without weakening the gate.
|
|
505
|
+
|
|
506
|
+
Referee: the same referee the stage uses. The pre-action check does not replace the stage-end check; it moves the same check earlier, so drift is found before it costs a build.
|
|
507
|
+
|
|
508
|
+
Failure modes:
|
|
509
|
+
|
|
510
|
+
- **Reading the tree from memory.** Symptom: you plan against what the tree was two commits ago and the plan collides with the current state. Correction: never trust remembered tree state across a boundary (a new session, a returned dispatch, a merged PR); re-read via `rcf define validate` and the relevant `audit` verb.
|
|
511
|
+
- **Waiting to be asked.** Symptom: the operator has to say "run validate" before you run it. Correction: the check runs unprompted. If the operator ever has to name the verb, that is a defect in your driving, not a preference of theirs.
|
|
512
|
+
- **Skipping the check because "the bundle is fresh".** Symptom: you fetched the bundle five minutes ago and treat it as current truth after a merge, a tree edit, or a returned dispatch. Correction: freshness is measured in tree writes, not in wall-clock minutes.
|
|
513
|
+
|
|
514
|
+
Escalation: if the pre-action check fails and the finding is not a clean local fix (a missing field on one document), stop and surface it (18.2). Do not carry a broken tree into a build stage on the assumption it will sort itself out.
|
|
515
|
+
|
|
516
|
+
### 18.2 Surface findings in the operator's language
|
|
517
|
+
|
|
518
|
+
What good looks like:
|
|
519
|
+
|
|
520
|
+
- Every finding from a referee verb (`rcf define validate`, `rcf audit coverage`, `rcf audit trace`, `rcf audit impact`) is translated into the behaviour it is really about before it reaches the operator. The operator hears the missing check, not the missing row.
|
|
521
|
+
- The translation names the feature, not the document. "The plan for search does not say what should happen when nothing matches, want me to add a check for that?" beats "AC-207 has no covering TS". "Sign-up does not describe what happens on a bad token" beats "US-104's AC set is missing the failure path". If the operator asks "which id?", you name it; otherwise the id stays on disk.
|
|
522
|
+
- The plain-language surfacing is not a softening of the finding, it is a precise one. Method vocabulary compresses; plain language expands. If two chain findings translate to one plain-language ask, group them; if one chain finding translates to two distinct behaviour asks, split them. Faithful to the intent, not to the row count.
|
|
523
|
+
- One question at a time, decision-shaped. "Want me to add a check for that?" is a decision; "There is drift across three ACs, should I audit them?" is a hedge. When the finding needs a fix, propose the fix; when it needs a decision, put the decision.
|
|
524
|
+
|
|
525
|
+
Failure modes:
|
|
526
|
+
|
|
527
|
+
- **Reciting the referee output.** Symptom: the operator receives a paste of `rcf audit coverage --strict` with the offending row highlighted. Correction: keep referee output in the PR body and on disk; in chat, name the behaviour and the ask.
|
|
528
|
+
- **Method words leaking.** Symptom: "AC", "coverage", "traceability", "FBS", "chain", "strict" reach the operator on your side of the conversation. Correction: check the message before sending; those words belong in files. The exception is when the operator used them first.
|
|
529
|
+
- **Translating away the substance.** Symptom: "there is a small gap in the plan" hides that a whole failure path is missing. Correction: plain language is not vague language; the ask is as specific as the finding.
|
|
530
|
+
|
|
531
|
+
Escalation: if the finding is a spec-level ambiguity (two ACs cannot both hold, an AC has two readings that survive a careful read), section 8's escalation shape applies, still in plain language. Method terms do not become licit because the finding is complex.
|
|
532
|
+
|
|
533
|
+
### 18.3 The method's failure modes are yours to catch
|
|
534
|
+
|
|
535
|
+
What good looks like:
|
|
536
|
+
|
|
537
|
+
- Every failure mode named in this playbook is a self-check you run before it can turn into a defect. The sections above list them per stage; this subsection is the load-bearing statement that catching them is your job, not the operator's. A defect the operator has to spot in your work is a self-check you did not run.
|
|
538
|
+
- Before each stage-end commit, walk the stage's failure-mode list as a checklist. Stage 1: did the plan restate the FBS summary instead of the AC set; does any planned step trace to an AC id; did I keep the plan inside the bundle's scope. Stage 2: does every diff hunk map to an in-scope AC; did any new dependency arrive without an ADR; are Code Nodes authored as the code lands. Stage 3: did I walk the AC list as the outer loop, not the diff; is any deviation from the bundle documented, not smoothed over. Stage 4: did the referee actually run; does each test assert the AC's observable outcome and not the implementation's internals. Stage 5: is there any AC without a Code Node; am I marking complete before the merge, not after; does every verification claim name its runtime.
|
|
539
|
+
- The five escalation cases in section 8 are self-triggered too. You do not wait for the operator to notice the plan is stuck on an ambiguous AC; you stop, report the ambiguity in plain language (18.2), and wait.
|
|
540
|
+
- Test-honesty failure modes belong to you first. Editing a test to make it pass is the paradigm case: the referee has caught a real gap between code and spec, and rewriting the assertion hides the finding. When a test fails, the answer is to fix the code or fix the spec (RULE 4), never to fix the test into agreement with the wrong thing. Same for stubbing a broken pointer, deleting a failing assertion, or narrowing an AC to what the code happens to do.
|
|
541
|
+
- Build-scope failure modes belong to you first. Gold-plating past the AC set, silent dependency additions, refactors the bundle did not ask for, docs beyond the spec: the check is "did the bundle ask for this?", answered before the diff lands, not after review flags it.
|
|
542
|
+
|
|
543
|
+
Failure modes of the failure-mode discipline:
|
|
544
|
+
|
|
545
|
+
- **Waiting for the operator to notice.** Symptom: a defect is caught in operator review that a stage-end self-check would have caught. Correction: run the self-check at every stage end, and treat the operator's find as a signal to sharpen the checklist for the next item.
|
|
546
|
+
- **Self-check as narration.** Symptom: the report to the operator lists the checks you ran. Correction: the checks are silent; the report is the outcome. "Stage 4 done, coverage clean against the item's ACs" is the shape; the checklist itself stays on your side.
|
|
547
|
+
- **Trusting the referee to catch judgement failures.** Symptom: you rely on `rcf define validate` and `rcf audit coverage` to catch a test that is asserting the wrong thing. Correction: the referee checks structure; the judgement half (does this AC capture the intent; does this test assert the outcome, not the implementation) is your check, not the tool's. Overview §5 (Mechanical, not semantic) names the split.
|
|
548
|
+
|
|
549
|
+
Escalation: if the same failure mode recurs across items, that is a checklist gap or a bundle-shape gap; report it to the operator as a method-side finding (in plain language), not as a per-item slip.
|
|
@@ -180,6 +180,48 @@ things the operator does not want in the shared repo. The absence of
|
|
|
180
180
|
the file is not an error; a fresh clone from another developer has no
|
|
181
181
|
profile of yours yet.
|
|
182
182
|
|
|
183
|
+
### RULE 11: Validate the chain before you act on it.
|
|
184
|
+
|
|
185
|
+
Before you emit a build spec, execute one, edit the tree, or run any
|
|
186
|
+
verb that reads the tree as truth, run `rcf define validate`. The
|
|
187
|
+
operator does not have to ask, and the check does not wait for a stage
|
|
188
|
+
that names it. A dirty tree is caught here rather than mid-Build, mid-
|
|
189
|
+
Test, or at the ship gate. If validation fails or coverage is broken
|
|
190
|
+
against the work in hand, stop and surface the finding to the operator
|
|
191
|
+
(RULE 12) before touching code or authoring documents. Everything
|
|
192
|
+
downstream assumes the tree you are reading is the tree the referee
|
|
193
|
+
thinks it is; the pre-action check is what keeps that assumption true.
|
|
194
|
+
|
|
195
|
+
### RULE 12: Surface method findings in the operator's language.
|
|
196
|
+
|
|
197
|
+
When `rcf define validate`, `rcf audit coverage`, `rcf audit trace` or a
|
|
198
|
+
spec inspection turns up a gap, translate it into plain intent before
|
|
199
|
+
you raise it. The operator hears the behaviour that is missing, not the
|
|
200
|
+
document id that is missing. "The plan for search does not say what
|
|
201
|
+
should happen when nothing matches, want me to add a check for that?"
|
|
202
|
+
beats "AC-207 has no covering TS". Method terms and document ids belong
|
|
203
|
+
in files and command output; the conversation carries the intent behind
|
|
204
|
+
them. An id appears only when you are pointing the operator at a
|
|
205
|
+
specific file, or after the operator used it first. The general
|
|
206
|
+
register for talking to the operator is set higher in this file; this
|
|
207
|
+
rule is that register applied to findings.
|
|
208
|
+
|
|
209
|
+
### RULE 13: The method's failure modes are yours to catch.
|
|
210
|
+
|
|
211
|
+
The failure modes the method exists to guard against are agent-side
|
|
212
|
+
self-checks, not defects for the operator to spot and name. Skipping a
|
|
213
|
+
layer, gold-plating past the AC set, editing a test to pass instead of
|
|
214
|
+
fixing the code, marking complete before the merge, drifting off the
|
|
215
|
+
bundle, inventing a fact the stakeholder never gave you, treating a
|
|
216
|
+
rubber-stamp read as review, marking a stage done without its referee
|
|
217
|
+
output: you catch each one before the stage ends. Before you commit a
|
|
218
|
+
stage, run the self-check: every in-scope AC maps to a diff location;
|
|
219
|
+
every planned step traces to an AC id; the referee output actually ran
|
|
220
|
+
and named the id you were working on; nothing landed the bundle did not
|
|
221
|
+
ask for. A failure the operator has to point out is a failure you did
|
|
222
|
+
not check for. The depth for each stage's self-check lives in the
|
|
223
|
+
build-cycle playbook.
|
|
224
|
+
|
|
183
225
|
### Session start
|
|
184
226
|
|
|
185
227
|
Run `rcf define validate`. A broken tree is fixed or reported before anything
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
70e0048d6160f15191dfbcf43588b0ba4cd24349b7ee8098671f121110677348
|
|
@@ -167,6 +167,48 @@ things the operator does not want in the shared repo. The absence of
|
|
|
167
167
|
the file is not an error; a fresh clone from another developer has no
|
|
168
168
|
profile of yours yet.
|
|
169
169
|
|
|
170
|
+
### RULE 11: Validate the chain before you act on it.
|
|
171
|
+
|
|
172
|
+
Before you emit a build spec, execute one, edit the tree, or run any
|
|
173
|
+
verb that reads the tree as truth, run `rcf define validate`. The
|
|
174
|
+
operator does not have to ask, and the check does not wait for a stage
|
|
175
|
+
that names it. A dirty tree is caught here rather than mid-Build, mid-
|
|
176
|
+
Test, or at the ship gate. If validation fails or coverage is broken
|
|
177
|
+
against the work in hand, stop and surface the finding to the operator
|
|
178
|
+
(RULE 12) before touching code or authoring documents. Everything
|
|
179
|
+
downstream assumes the tree you are reading is the tree the referee
|
|
180
|
+
thinks it is; the pre-action check is what keeps that assumption true.
|
|
181
|
+
|
|
182
|
+
### RULE 12: Surface method findings in the operator's language.
|
|
183
|
+
|
|
184
|
+
When `rcf define validate`, `rcf audit coverage`, `rcf audit trace` or a
|
|
185
|
+
spec inspection turns up a gap, translate it into plain intent before
|
|
186
|
+
you raise it. The operator hears the behaviour that is missing, not the
|
|
187
|
+
document id that is missing. "The plan for search does not say what
|
|
188
|
+
should happen when nothing matches, want me to add a check for that?"
|
|
189
|
+
beats "AC-207 has no covering TS". Method terms and document ids belong
|
|
190
|
+
in files and command output; the conversation carries the intent behind
|
|
191
|
+
them. An id appears only when you are pointing the operator at a
|
|
192
|
+
specific file, or after the operator used it first. The general
|
|
193
|
+
register for talking to the operator is set higher in this file; this
|
|
194
|
+
rule is that register applied to findings.
|
|
195
|
+
|
|
196
|
+
### RULE 13: The method's failure modes are yours to catch.
|
|
197
|
+
|
|
198
|
+
The failure modes the method exists to guard against are agent-side
|
|
199
|
+
self-checks, not defects for the operator to spot and name. Skipping a
|
|
200
|
+
layer, gold-plating past the AC set, editing a test to pass instead of
|
|
201
|
+
fixing the code, marking complete before the merge, drifting off the
|
|
202
|
+
bundle, inventing a fact the stakeholder never gave you, treating a
|
|
203
|
+
rubber-stamp read as review, marking a stage done without its referee
|
|
204
|
+
output: you catch each one before the stage ends. Before you commit a
|
|
205
|
+
stage, run the self-check: every in-scope AC maps to a diff location;
|
|
206
|
+
every planned step traces to an AC id; the referee output actually ran
|
|
207
|
+
and named the id you were working on; nothing landed the bundle did not
|
|
208
|
+
ask for. A failure the operator has to point out is a failure you did
|
|
209
|
+
not check for. The depth for each stage's self-check lives in the
|
|
210
|
+
build-cycle playbook.
|
|
211
|
+
|
|
170
212
|
### Session start
|
|
171
213
|
|
|
172
214
|
Run `rcf define validate`. A broken tree is fixed or reported before anything
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rcf-lite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "One-install tooling for the Requirements Confidence Framework (RCF): the unified `rcf` CLI grouped into the five RCF tool groups (discover, define, build, verify, audit) plus a small core set (init, doctor, guidance, mcp), an MCP server, the live tree viewer and the fresh-context adversarial ship-gate verifier. Consumes @stravica-ai/rcf-schemas.",
|
|
6
6
|
"license": "Apache-2.0",
|