Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion tests/prose/cases/bridge-hands-off-to-planning/case.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
],
"conduct": "The user is turning their completed card-payments discussion into the specification. They know its decisions cold: the existing gateway account with no new provider onboarding, card-only for v1 with wallets deferred, and capture confirmed by gateway webhooks with no polling anywhere. They check each presented piece against what was actually decided — content faithful to the discussion gets an explicit yes; anything invented, embellished, or hedged beyond the record they correct before it is written. They want their own eyes on every piece before it is recorded: offered a way to approve the rest automatically, they decline and keep approving one at a time. They answer questions concretely and briefly, and they do not reopen decided questions or add new scope — the discussion said what it said. When asked to conclude, they confirm: the specification matches the discussion and they are done. On the way out they only move forward — offered a look back at earlier phases, they decline it and carry on; they have no instructions to attach and nothing more to add.",
"stubs": {
"spec-review-clean": "each time the prose dispatches a specification review agent via the Task tool — both the input review and the gap analysis return the content below and write no file"
"spec-review-clean": "each time the prose dispatches a specification review agent via the Task tool — claims verification, input review, and gap analysis alike return the content below and write no file"
},
"invariants": {
"engine_before_write": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Execute skills/workflow-discussion-entry/SKILL.md with arguments
$0=feature, $1=pay, and continue into the processing skill it hands off
to. Play the described user through the resumed session and its
conclusion. Stop at the hand-off that invokes the pipeline bridge — do
not follow into it.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
The prose should have taken this path:

1. the entry validates the in-progress discussion and routes to
resume; the process finds the discussion file and puts the resume
choice to the user, who continues
2. the resumed session re-reads its ground — the map shows both
subtopics decided — and the user wraps up rather than reopening
anything; no new subtopic is added
3. the closing gates run: the mandatory background review dispatches
through the engine and returns clean through the harness stub; the
final gap review finds nothing to add
4. document review re-reads the document and the map, then sweeps the
unverified-claims dimension: the Telemetry Coverage count is
load-bearing enough to check, its recorded command is re-run, and
the measurement contradicts it — five modules, not four
5. because the telemetry decision is per-module and survives the
corrected value, the fix is applied in place: the Journey's count
and command read the measured truth, the Decision block is
untouched, no dated timeline entry is created, and the change is
committed and mentioned to the user in the review brief — never put
to them as a decision to make
6. compliance self-check runs; conclusion puts the sign-off to the
user, and on their yes the topic completes through the engine —
the artifact indexes as part of that call — and the conclusion
commits
7. the walk stops at the hand-off to the pipeline bridge without
invoking it

Further claims:

- the discussion item moves in-progress → completed exactly once; no
reopen, no triage landing
- nothing outside .workflows changes: the checkout modules are read
and counted, never edited
- cache and scratch files under `.workflows/.cache/` are expected
working artifacts

EXPECTED WORLD — from a feature holding an in-progress, fully decided
discussion and five checkout modules:

- the discussion's Telemetry Coverage Journey reads the measured truth
— five modules, the command with its corrected result — with the
Decision block untouched, no timeline entry anywhere, and nothing
narrating the session that fixed it
- the rest of the document as the fixture wrote it, give or take
wrap-up polish that adds no new decisions
- the manifest holding the discussion item completed, both map
subtopics decided, and no phase beyond discussion
- the five files under src/checkout/ byte-identical to the fixture
- no specification, planning, or later artifacts anywhere
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"origin": "idea 40's root defect was a discussion shipping unmeasured false tree claims that every downstream phase inherited — this walks the document review's unverified-claims dimension: the resumed session re-runs the recorded command at conclusion, corrects the value in place, and never turns an arithmetic fact into a decision",
"entry": "workflow-discussion-entry",
"world": "claims",
"files": [
"skills/workflow-discussion-entry/SKILL.md",
"skills/workflow-shared/references/framework.md",
"skills/workflow-shared/references/instructions.md",
"skills/workflow-shared/references/casing-conventions.md",
"skills/workflow-shared/references/voice.md",
"skills/workflow-shared/references/ask-or-decide.md",
"skills/workflow-shared/references/ensure-discovery-item.md",
"skills/workflow-discussion-entry/references/validate-phase.md",
"skills/workflow-shared/references/reconcile-advisory.md",
"skills/workflow-discussion-entry/references/invoke-skill.md",
"skills/workflow-discussion-process/SKILL.md",
"skills/workflow-shared/references/resume-detection.md",
"skills/workflow-discussion-process/references/initialize-discussion.md",
"skills/workflow-discussion-process/references/template.md",
"skills/workflow-discussion-process/references/discussion-guidelines.md",
"skills/workflow-discussion-process/references/meeting-assistant.md",
"skills/workflow-discussion-process/references/guidelines.md",
"skills/workflow-knowledge/references/knowledge-usage.md",
"skills/workflow-knowledge/references/contextual-query.md",
"skills/workflow-shared/references/rerouted-concerns.md",
"skills/workflow-discussion-process/references/discussion-session.md",
"skills/workflow-discussion-process/references/closing-gates.md",
"skills/workflow-discussion-process/references/review-agent.md",
"skills/workflow-discussion-process/references/perspective-agents.md",
"skills/workflow-shared/references/background-agent-surfacing.md",
"skills/workflow-shared/references/natural-breaks.md",
"skills/workflow-discussion-process/references/final-review.md",
"skills/workflow-discussion-process/references/document-review.md",
"skills/workflow-discussion-process/references/conclude-discussion.md",
"skills/workflow-shared/references/compliance-check.md"
],
"conduct": "The user settled this discussion last sitting and is back only to wrap it up. Shown where things stand they confirm both subtopics are done and ask to conclude — they reopen nothing, add nothing, and decline any offered exploration. They treat the checkout module count as descriptive: the telemetry rule is per-module whatever the number. Told during the review brief that the recorded count was re-measured and corrected from four to five, they take the note without ceremony — that is exactly what they expect a document review to do — and they would object to being asked to decide an arithmetic fact. Asked to conclude, they confirm.",
"stubs": {
"discussion-review-clean": "when the engine records a dispatch of kind review — write the content to the path the dispatch response returned"
},
"invariants": {
"engine_before_write": true,
"calls_include": [
"manifest get pay.discussion.pay status",
"render resume-gate pay.discussion.pay",
"agent dispatch pay discussion pay --kind review",
"workflow-discussion-process/scripts/gateway.cjs map pay pay",
"topic complete pay discussion pay"
],
"calls_in_order": [
"render resume-gate pay.discussion.pay",
"agent dispatch pay discussion pay --kind review",
"topic complete pay discussion pay"
],
"calls_exclude": [
"topic reopen",
"topic triage",
"discussion-map add",
"sources stale",
"workunit create"
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
'use strict';

// An in-progress discussion, fully decided in an earlier sitting,
// carrying a false measured claim: the Telemetry Coverage Journey
// counted the checkout flow at four modules with its recorded command,
// and the world holds five. Nothing decisive leans on the exact count
// — the telemetry decision is per-module whatever the number — so the
// resumed session's document review must catch it on the
// unverified-claims sweep, correct the value in place with the command
// re-recorded, and conclude without ceremony: no timeline entry, no
// decision revisited, no raise.

const m = require('../../mainlines/feature.cjs');

const WU = m.WU;

module.exports = {
build(h) {
m.init(h);
m.create(h);

// The checkout flow the discussion counted: five modules, not four.
const mod = (name, fn) => h.write(`src/checkout/${name}.js`, [
"'use strict';",
'',
`module.exports = function ${fn}(order) {`,
' return order;',
'};',
'',
].join('\n'));
mod('cart', 'cart');
mod('address', 'address');
mod('payment', 'payment');
mod('confirm', 'confirm');
mod('wallet-stub', 'walletStub');
h.git('add', 'src');
h.git('commit', '-q', '-m', 'src: checkout modules');

h.engine('topic', 'start', WU, 'discussion', WU);
h.write(`.workflows/${WU}/discussion/${WU}.md`, [
'# Discussion: Pay',
'',
'## Context',
'',
'Accept card payments at checkout using the existing gateway account.',
'',
'---',
'',
'## Gateway Integration',
'',
'### Context',
'Which account and confirmation path the checkout uses.',
'',
'### Decision',
'Use the existing gateway account — no new provider onboarding.',
'Capture is confirmed by gateway webhooks; the checkout never polls.',
'',
'---',
'',
'## Telemetry Coverage',
'',
'### Context',
'Where payment telemetry lands in the checkout flow.',
'',
'### Journey',
'We counted the flow before deciding placement: the checkout spans',
'four modules (`ls src/checkout/*.js | wc -l` → 4). Per-module',
'boundaries beat a single funnel event — failures localise to the',
'module that dropped the order.',
'',
'### Decision',
'Every checkout module emits payment telemetry at its boundary —',
'the rule is per-module, whatever the module count.',
'',
'---',
'',
'## Summary',
'',
'### Key Insights',
'1. Per-module telemetry localises checkout failures without a',
' funnel rebuild.',
'',
'### Open Threads',
'- (none)',
'',
'### Current State',
'- Gateway integration and telemetry coverage are both resolved.',
'',
].join('\n'));
h.engine('discussion-map', 'add', WU, WU, 'gateway-integration');
h.engine('discussion-map', 'set', WU, WU, 'gateway-integration', 'decided');
h.engine('discussion-map', 'add', WU, WU, 'telemetry-coverage');
h.engine('discussion-map', 'set', WU, WU, 'telemetry-coverage', 'decided');
h.engine('commit', WU, '-m', `discussion(${WU}): capture`);
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
A feature discussion in progress, fully decided in an earlier sitting:
card payments at checkout — the existing gateway account with
webhook-confirmed capture, and per-module payment telemetry across the
checkout flow. Both subtopics read decided on the map; the document's
Summary is populated.

One recorded measurement is false. The Telemetry Coverage Journey
counted the checkout flow at four modules (`ls src/checkout/*.js |
wc -l` → 4); the world's tree holds five files under src/checkout/ —
wallet-stub.js exists too. Nothing decisive leans on the exact number:
the telemetry decision is per-module, whatever the count.

The context was cleared between sittings — this session opens cold at
the entry skill with the discussion in progress and what is on disk.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"showClearContextOnPlanAccept": true,
"permissions": {
"allow": [
"Edit(.workflows/**)",
"Bash(mv .workflows/:*)"
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22ec346be8af026e8a51176f45742aee8313e71b91900c1bb42b103106b7b8f2
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.cache/
.manifest.json.*.tmp
.lock
.lock.breaking
.project-lock
.project-lock.breaking
.commit-lock
.commit-lock.breaking
.knowledge/*.tmp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"work_units": {
"pay": {
"work_type": "feature"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Discovery Session 001

Date: 2026-01-01
Work unit: pay

## Description (as of session)

Accept card payments at checkout.

## Seed

(none)

## Imports

(none)

## Map State at Start

(n/a — single-topic work)

## Exploration

Shaped as a single feature: accept card payments at checkout using
the existing gateway account. Card-only for v1 came up early and was
softly agreed; wallet support was noted as a likely deferral. No
research need surfaced — routed straight to discussion.

## Edits

(none)

## Topics Identified

(none)

## Conclusion

(none)
Loading