{
"schema_version": "actionist.decision-ledger.v1",
"part": "P02",
"run_id": "2026-08-27-sprint-1-fable",
"lane": "S1-L1",
"observed": "2026-08-27",
"status": "research_only_unpromoted",
"decisions": [
{
"id": "D-P02-01",
"decision": "Elicit directly into a falsifiable structure rather than eliciting freely and formalising afterwards.",
"confidence": "inferred",
"rationale": "No commercial surface (0 of 51) combines elicitation with falsifiability. Two OSS projects (spec-kit, OpenSpec) combine them by convention with no enforcing engine, which is why the structure must be present during elicitation AND mechanically enforced. Corrected at verification from an initial overreach ('nothing in 111 does both'), which the lane's own self-check falsified.",
"falsifier": "If slot-directed elicitation measurably degrades conversational quality or client completion versus free elicitation plus a formalisation pass, the sequencing is wrong.",
"depends_on": [
"P01 ClientContext handoff"
],
"evidence": [
"com-b-013",
"com-b-045",
"com-b-003",
"com-b-024"
]
},
{
"id": "D-P02-02",
"decision": "Adopt EARS slot-mandatory grammar as the internal ProductSpec requirement representation.",
"confidence": "inferred",
"rationale": "Mandatory trigger/precondition/system/response slots make gaps structurally visible; an unfilled slot is simultaneously the confidence representation and the next interview question. Temporal clause order maps mechanically onto Given/When/Then.",
"falsifier": "Encode five real business workflows in EARS; if a material share of statements resist the grammar or require an escape hatch, EARS does not fit fuzzy business outcomes.",
"depends_on": [],
"evidence": [
"com-b-013"
]
},
{
"id": "D-P02-03",
"decision": "Represent confidence as an unfilled mandatory slot or an absent provenance pointer, never as a percentage on a requirement.",
"confidence": "inferred",
"rationale": "Nothing in 51 commercial surfaces represented confidence as a percentage, despite every incentive to add one if it sold. Slot-absence needs no scale and is self-evident to a reader.",
"falsifier": "If clients or downstream composition demand a scalar confidence to make decisions, slot-absence is insufficient.",
"depends_on": [
"P12 composition input needs"
],
"evidence": [
"com-b-013",
"com-b-003",
"com-b-043"
]
},
{
"id": "D-P02-04",
"decision": "Every requirement carries a computed coverage state starting UNCOVERED; a spec is not complete while any requirement holds it.",
"confidence": "inferred",
"rationale": "Xray computes UNCOVERED as a property of the requirement itself — falsifiability computed rather than asserted, and precisely what every AI-PRD tool lacks.",
"falsifier": "If coverage can be trivially satisfied by shallow generated criteria, the state is decorative rather than falsifiable.",
"depends_on": [
"P14 verification contract"
],
"evidence": [
"com-b-045",
"com-b-014"
]
},
{
"id": "D-P02-05",
"decision": "Write ambiguity into the artifact at the point of ambiguity, carrying candidate answers; gate promotion on zero open markers, with a documented waiver path.",
"confidence": "inferred",
"rationale": "spec-kit's NEEDS-CLARIFICATION marker makes unresolved intent countable, greppable and impossible to skip silently. A waiver path is required because an ungoverned gate gets bypassed, and a bypassed gate is worse than none.",
"falsifier": "If marker count falls because the authoring model guesses confidently rather than because ambiguity resolved, the gate measures nothing — this requires an independent ambiguity detector to test.",
"depends_on": [],
"evidence": [
"oss-a-001"
]
},
{
"id": "D-P02-06",
"decision": "Every requirement carries a provenance pointer to the client utterance or evidence item that produced it.",
"confidence": "inferred",
"rationale": "Converts scope disputes from opinion into lookup. Only one commercial surface clearly links derived items to source; it is an open competitive gap.",
"falsifier": "Cold-start engagements have no utterance corpus; if most requirements end up pointing at Actionist-authored assumptions rather than client evidence, the pointer degenerates.",
"depends_on": [
"P01 evidence capture"
],
"evidence": [
"com-b-003",
"com-a-002"
]
},
{
"id": "D-P02-07",
"decision": "Acceptance is an explicit blocking Accept/Revise gate that baselines the spec; reject task-list-as-spec.",
"confidence": "inferred",
"rationale": "A spec the client never explicitly accepted is not a spec. Task lists say what will be done, never what must be true afterwards, converting specification failure into rollback rather than prevention.",
"falsifier": "If the revision rate approaches zero, the gate is ceremonial rather than load-bearing.",
"depends_on": [],
"evidence": [
"com-b-024",
"com-b-014"
]
},
{
"id": "D-P02-08",
"decision": "Generate Gherkin as an output artifact; never require the client to author it.",
"confidence": "inferred",
"rationale": "Preserves the two-audience property (client-readable, machine-executable) while avoiding the documented decay mode where step definitions become a maintenance burden and scenarios end up written by developers for developers.",
"falsifier": "If generated scenarios require correction at a high rate under human review, generation is not faithful enough to serve as the acceptance gate.",
"depends_on": [
"P14 execution"
],
"evidence": [
"com-b-044",
"oss-a-045",
"com-b-051"
]
},
{
"id": "D-P02-09",
"decision": "Structure the spec so clauses are selectable into a build prompt rather than pasted as a blob.",
"confidence": "inferred",
"rationale": "A vendor with a shipping product documents that in long conversations with heavy context, instructions may not be followed consistently. Any ProductSpec fed wholesale to a coding agent will hit that failure.",
"falsifier": "If selection errors silently drop load-bearing requirements more often than blob-stuffing loses them, selection is the worse failure mode.",
"depends_on": [
"P12",
"P13"
],
"evidence": [
"com-b-023"
]
},
{
"id": "D-P02-10",
"decision": "Repeat engagements produce ADDED/MODIFIED/REMOVED deltas against the last accepted baseline; settled requirements are never re-elicited.",
"confidence": "inferred",
"rationale": "The second engagement with a client is never a blank page, and re-eliciting settled requirements wastes client goodwill.",
"falsifier": "If baselines drift out of accuracy faster than deltas can be applied, delta framing produces false confidence in the base.",
"depends_on": [
"P01 answer-reuse memory"
],
"evidence": [
"oss-a-002",
"com-b-014"
]
},
{
"id": "D-P02-11",
"decision": "Enforce implementation-independence mechanically with a linter rejecting clauses that name a repository, database or framework.",
"confidence": "inferred",
"rationale": "Framework invariant 3 currently depends on reviewer vigilance. A mechanical check makes it a property of the artifact.",
"falsifier": "If clients have legitimate stack constraints that must be recorded, and the linter forces them into an untracked side channel, it causes the loss it aims to prevent.",
"depends_on": [
"P12"
],
"evidence": [
"local-005",
"local-006"
]
},
{
"id": "D-P02-12",
"decision": "Master acceptance scenarios in the spec, decided once, rather than allowing dual mastering between spec and repo.",
"confidence": "inferred",
"rationale": "The tooling's own documentation surfaces dual mastering as an unresolved tension teams must decide; deciding it once avoids inherited drift.",
"falsifier": "If engineering workflows require repo-mastered scenarios, spec mastering forces a sync problem rather than solving one.",
"depends_on": [
"P14"
],
"evidence": [
"com-b-045"
]
}
],
"rejected": [
{
"id": "R-P02-01",
"rejected": "Adopt SurveyJS on the basis of its MIT badge for spec/questionnaire authoring.",
"reason": "MIT covers the renderer only; the drag-and-drop Creator is a separate repo under a Devsoft Baltic commercial EULA. Any proposal stating 'we'll use SurveyJS, it's MIT' understates cost unless the authoring surface is built in-house or JSON is agent-authored.",
"evidence": [
"oss-a-032"
]
},
{
"id": "R-P02-02",
"rejected": "Treat ai-prd-generator's confidence-gated clarification loop as adoptable prior art.",
"reason": "Despite a LICENSE file, the body is proprietary commercial, All Rights Reserved. Its 92/95/100% multi-judge gating claims are unauditable marketing behind a paid licence key — the most mechanically interesting design in the segment and inadmissible as evidence.",
"evidence": [
"oss-a-011"
]
},
{
"id": "R-P02-03",
"rejected": "Adopt the DOORS Next configuration-context model for traceability.",
"reason": "Cross-component traceability only resolves inside a Global Configuration context, requiring an administrator-designed data model and configuration-management literacy from every author. Single-stream client specs do not need it, and it is where the tool spends most of its usability budget.",
"evidence": [
"com-b-014",
"com-b-016"
]
},
{
"id": "R-P02-04",
"rejected": "Repeat the Jama Advisor ambiguity-detection capability as an observed mechanism.",
"reason": "The fetched Advisor page enumerates zero INCOSE rules, zero EARS patterns and no scoring mechanism. The widely repeated claim could not be confirmed from any source found and is flagged unverified.",
"evidence": [
"com-b-011",
"com-b-012"
]
},
{
"id": "R-P02-05",
"rejected": "Use an unbounded plain-text knowledge blob as the persistent spec carrier.",
"reason": "Vendor-documented 10,000-character cap plus a conceded degradation mode in long contexts. Structure enables selection; blobs rely on hope.",
"evidence": [
"com-b-023"
]
}
],
"open_questions": [
"What is the true minimum ProductSpec? Derived backwards from P12's anticipated inputs, but P12's contract is unsettled in Sprint 1 and S2-L4 may revise it.",
"Does EARS survive contact with five real workflows? The proving harness is specified but UNRUN — this is the lane's primary unexecuted falsifier.",
"Who owns the waiver path on the promotion gates?",
"How is spec expiry calibrated without engagement data?",
"Can generated Gherkin ever be trusted enough to skip human formulation review?",
"Does a structurally rich spec render as one humane client-facing page without hiding load-bearing clauses?"
],
"boundaries": {
"research_only": true,
"client_data_used": false,
"authenticated_access": false,
"repositories_cloned_or_executed": 0,
"validated_demand_established": false,
"admitted_blocks": 0,
"schema_committed": false,
"five_workflow_harness_executed": false
}
}P02 · Demand · Rendered from source
decision ledger
Outcome and product specification