thoth-agents 0.2.4 → 0.2.6
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/dist/{chunk-YZNH23HZ.js → chunk-5DHG5II4.js} +1 -1
- package/dist/{chunk-HFZAL6NE.js → chunk-76DARQOT.js} +12 -7
- package/dist/{chunk-PDKLWORW.js → chunk-DAZFSPN4.js} +6 -3
- package/dist/cli/index.js +3 -3
- package/dist/cli/tui/index.js +2 -2
- package/dist/harness/core/sdd.d.ts +5 -2
- package/dist/index.js +2 -2
- package/dist/sdd/artifact-governance/artifact-loader.d.ts +75 -0
- package/dist/sdd/artifact-governance/index.d.ts +2 -2
- package/package.json +1 -1
- package/src/skills/_shared/openspec-convention.md +4 -0
- package/src/skills/_shared/persistence-contract.md +2 -0
- package/src/skills/_shared/thoth-mem-convention.md +2 -0
- package/src/skills/plan-reviewer/SKILL.md +14 -0
|
@@ -921,11 +921,14 @@ var SDD_PHASES = [
|
|
|
921
921
|
order: 8,
|
|
922
922
|
requiredFor: ["accelerated", "full"],
|
|
923
923
|
prerequisites: ["tasks"],
|
|
924
|
-
producesArtifact:
|
|
924
|
+
producesArtifact: true,
|
|
925
925
|
gate: "oracle-review",
|
|
926
926
|
owner: "oracle",
|
|
927
|
+
artifactSkill: "plan-reviewer",
|
|
928
|
+
artifactMeaning: "durable-plan-review-result",
|
|
927
929
|
defaultAgentRole: "oracle",
|
|
928
|
-
|
|
930
|
+
persistenceAgentRole: "quick",
|
|
931
|
+
delegationReason: "Independent read-only executability review of tasks before implementation; quick persists the durable review artifact when writes are required."
|
|
929
932
|
},
|
|
930
933
|
{
|
|
931
934
|
id: "implementation-confirmation",
|
|
@@ -986,12 +989,14 @@ var SDD_WORKFLOW_CONTRACT = {
|
|
|
986
989
|
artifactRules: [
|
|
987
990
|
"SDD delegation defaults are phase-specific: sdd-propose, sdd-spec, and sdd-design default to deep.",
|
|
988
991
|
"sdd-tasks defaults to quick with deep as fallback when the task plan is complex.",
|
|
992
|
+
"plan-reviewer defaults to oracle for independent read-only review; quick persists the plan-review artifact when repository or memory writes are required.",
|
|
989
993
|
"sdd-verify defaults to oracle for independent review; quick persists the report when repository or memory writes are required.",
|
|
990
994
|
"sdd-archive defaults to quick for mechanical closeout.",
|
|
991
995
|
"OpenSpec design.md is technical solution design, not UI/UX design; sdd-design itself never routes to designer.",
|
|
992
996
|
"Designer participates during apply only for user-facing UI, visual work, screenshots, or visual QA.",
|
|
993
997
|
"Full-pipeline tasks require proposal, spec, and design artifacts.",
|
|
994
|
-
"Oracle is read-only and performs plan review plus independent verification review; it does not persist artifacts."
|
|
998
|
+
"Oracle is read-only and performs plan review plus independent verification review; it does not persist artifacts.",
|
|
999
|
+
"A fresh persisted plan-review approval satisfies only the plan-review gate; user implementation confirmation remains separate."
|
|
995
1000
|
],
|
|
996
1001
|
verificationRules: [
|
|
997
1002
|
"Plan review must complete before implementation confirmation.",
|
|
@@ -1261,7 +1266,7 @@ ${renderSddDelegationMatrix()}
|
|
|
1261
1266
|
Hard gates:
|
|
1262
1267
|
- Use the SDD delegation matrix as canonical phase routing.
|
|
1263
1268
|
- Load the matching skill when a phase has one.
|
|
1264
|
-
- {{role.oracle}} is read-only for plan-reviewer and sdd-verify review; {{role.quick}} persists verify
|
|
1269
|
+
- {{role.oracle}} is read-only for plan-reviewer and sdd-verify review; {{role.quick}} persists plan-review and verify artifacts when writes are required.
|
|
1265
1270
|
- Never skip artifacts or jump from requirements-interview to implementation when SDD is selected.
|
|
1266
1271
|
- Before SDD execution, load \`executing-plans\`; then track progress in {{progressTool}} plus the persistent artifact.
|
|
1267
1272
|
- If openspec persistence is selected and openspec/ is missing or stale (partial structure or missing mechanism sections), dispatch sdd-init first.
|
|
@@ -1277,9 +1282,9 @@ Artifact governance handoff:
|
|
|
1277
1282
|
- Root thoth-mem ownership stays with you; sub-agents must not own session memory, prompts, or progress checkpoints.
|
|
1278
1283
|
|
|
1279
1284
|
Plan gate: after tasks, ask with \`{{userQuestionTool}}\`: "Review plan with {{role.oracle}} before executing (Recommended)" or "Proceed to execution".
|
|
1280
|
-
|
|
1281
|
-
If {{role.oracle}} returns [OKAY], give
|
|
1282
|
-
Do not dispatch \`sdd-apply\`
|
|
1285
|
+
Plan review is complete only after fresh [OKAY] evidence in \`plan-review.md\` or \`sdd/{change-name}/plan-review\`; missing, stale, rejected, or unparsable evidence reruns oracle unless a user override is logged.
|
|
1286
|
+
Fresh [OKAY] satisfies only plan-review. If {{role.oracle}} returns [OKAY], or recovery accepts it, give an approved-plan overview, then ask with \`{{userQuestionTool}}\` whether to implement or stop. Cover scope, sequence, decisions, verification, risks, and uncertainty.
|
|
1287
|
+
Do not dispatch \`sdd-apply\` until user confirmation; never treat plan-review recovery as implementation confirmation.
|
|
1283
1288
|
Post-execution verify-loop (mirrors the plan-review loop's discipline; bounded to 3 rounds = initial apply->verify plus up to 2 fix->re-verify):
|
|
1284
1289
|
- Dispatch \`sdd-verify\` as an iterative gate, not a single shot; round 1 is the first verify after apply. Treat the \`round N\` marker in the verify report as the source of truth for the round counter and surface it in {{progressTool}}.
|
|
1285
1290
|
- On clean \`pass\`: proceed through the existing pre-archive user gate above, then delegate \`sdd-archive\`. Do not auto-advance to archive merely because a verify report exists.
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
renderRolePrompt,
|
|
36
36
|
writeConfig,
|
|
37
37
|
writeLiteConfig
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-76DARQOT.js";
|
|
39
39
|
|
|
40
40
|
// src/cli/codex-paths.ts
|
|
41
41
|
import { homedir } from "os";
|
|
@@ -1480,8 +1480,11 @@ function renderCodexRootInstructions(config) {
|
|
|
1480
1480
|
codexInternalHandoffGuidance(),
|
|
1481
1481
|
"<codex-runtime>",
|
|
1482
1482
|
"- The ambient Codex root session is the root/main orchestrator; orchestrator-only and root-owned instructions apply to it because Codex does not generate a selectable orchestrator agent TOML.",
|
|
1483
|
-
'- On each new root session,
|
|
1484
|
-
"-
|
|
1483
|
+
'- On each new root session, first resolve the stable root session identity from Codex request metadata in this order: `nodeRepl.requestMeta["x-codex-turn-metadata"].session_id`, then `nodeRepl.requestMeta["x-codex-turn-metadata"].thread_id`, then `nodeRepl.requestMeta.threadId`. Do not use `nodeRepl.requestMeta["x-codex-turn-metadata"].turn_id` as the stable session id.',
|
|
1484
|
+
'- `nodeRepl.requestMeta["x-codex-turn-metadata"].turn_id` is per-turn metadata only, not the stable root session id.',
|
|
1485
|
+
"- If `nodeRepl.requestMeta` is not yet visible and `tool_search` is available, load/discover the `node_repl` MCP tool before concluding metadata is unavailable.",
|
|
1486
|
+
'- When thoth-mem tools are installed and stable root session identity is resolved, call mem_session(action="start") as step 0 before any other thoth-mem call, then save the real user prompt with mem_save(kind="prompt") before later delegation.',
|
|
1487
|
+
"- If metadata tooling is unavailable, or the required fields are missing, disclose that memory bootstrap could not run and continue without claiming memory was saved.",
|
|
1485
1488
|
'- Before delegating after meaningful context changes, save or refresh the handoff body with root-owned mem_session(action="summary") or mem_save(kind="session_summary") when available; if unavailable, disclose that root-owned compaction could not be persisted.',
|
|
1486
1489
|
"- Use the ambient Codex root session as the delegate-first root coordinator; do not generate or select an orchestrator TOML.",
|
|
1487
1490
|
"- Delegate by invoking `multi_agent_v1.spawn_agent` for the installed Codex role agents: explorer, librarian, oracle, designer, quick, and deep.",
|
package/dist/cli/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getOpenCodeVersion,
|
|
5
5
|
isOpenCodeInstalled,
|
|
6
6
|
opencodeAdapter
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-5DHG5II4.js";
|
|
8
8
|
import {
|
|
9
9
|
CODEX_ROLE_NAMES,
|
|
10
10
|
RECOMMENDED_SKILLS,
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
getOperationHarness,
|
|
37
37
|
installRecommendedSkill,
|
|
38
38
|
listOperationHarnesses
|
|
39
|
-
} from "../chunk-
|
|
39
|
+
} from "../chunk-DAZFSPN4.js";
|
|
40
40
|
import {
|
|
41
41
|
ALL_AGENT_NAMES,
|
|
42
42
|
CUSTOM_SKILLS,
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
getExistingLiteConfigPath,
|
|
49
49
|
installCustomSkills,
|
|
50
50
|
writeLiteConfig
|
|
51
|
-
} from "../chunk-
|
|
51
|
+
} from "../chunk-76DARQOT.js";
|
|
52
52
|
|
|
53
53
|
// src/cli/index.ts
|
|
54
54
|
import { pathToFileURL } from "url";
|
package/dist/cli/tui/index.js
CHANGED
|
@@ -25,13 +25,13 @@ import {
|
|
|
25
25
|
listOperationHarnesses,
|
|
26
26
|
parseRoleTomlModel,
|
|
27
27
|
parseSubagentModel
|
|
28
|
-
} from "../../chunk-
|
|
28
|
+
} from "../../chunk-DAZFSPN4.js";
|
|
29
29
|
import {
|
|
30
30
|
ALL_AGENT_NAMES,
|
|
31
31
|
DEFAULT_MODELS,
|
|
32
32
|
getExistingLiteConfigPath,
|
|
33
33
|
parseConfig
|
|
34
|
-
} from "../../chunk-
|
|
34
|
+
} from "../../chunk-76DARQOT.js";
|
|
35
35
|
|
|
36
36
|
// src/cli/tui/index.tsx
|
|
37
37
|
import { render } from "ink";
|
|
@@ -123,11 +123,14 @@ export declare const SDD_PHASES: readonly [{
|
|
|
123
123
|
readonly order: 8;
|
|
124
124
|
readonly requiredFor: ["accelerated", "full"];
|
|
125
125
|
readonly prerequisites: ["tasks"];
|
|
126
|
-
readonly producesArtifact:
|
|
126
|
+
readonly producesArtifact: true;
|
|
127
127
|
readonly gate: "oracle-review";
|
|
128
128
|
readonly owner: "oracle";
|
|
129
|
+
readonly artifactSkill: "plan-reviewer";
|
|
130
|
+
readonly artifactMeaning: "durable-plan-review-result";
|
|
129
131
|
readonly defaultAgentRole: "oracle";
|
|
130
|
-
readonly
|
|
132
|
+
readonly persistenceAgentRole: "quick";
|
|
133
|
+
readonly delegationReason: "Independent read-only executability review of tasks before implementation; quick persists the durable review artifact when writes are required.";
|
|
131
134
|
}, {
|
|
132
135
|
readonly id: "implementation-confirmation";
|
|
133
136
|
readonly order: 9;
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
renderOpenCodeAgentConfigs,
|
|
4
4
|
spawn,
|
|
5
5
|
spawnSync
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-5DHG5II4.js";
|
|
7
7
|
import {
|
|
8
8
|
DEFAULT_THOTH_COMMAND,
|
|
9
9
|
POLL_INTERVAL_BACKGROUND_MS,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
installCustomSkills,
|
|
15
15
|
loadPluginConfig,
|
|
16
16
|
stripJsonComments
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-76DARQOT.js";
|
|
18
18
|
|
|
19
19
|
// src/index.ts
|
|
20
20
|
import path4 from "path";
|
|
@@ -49,7 +49,82 @@ export interface ArtifactLoaderResult extends ArtifactGovernanceResult {
|
|
|
49
49
|
openspec: ArtifactSnapshot | null;
|
|
50
50
|
}>;
|
|
51
51
|
}
|
|
52
|
+
export type PlanReviewRecoveryDecision = 'fresh-approval' | 'missing' | 'unparsable' | 'non-approval-status' | 'stale';
|
|
53
|
+
export interface PlanReviewReviewedArtifactInput {
|
|
54
|
+
role: string;
|
|
55
|
+
path: string;
|
|
56
|
+
required?: boolean;
|
|
57
|
+
content: string;
|
|
58
|
+
}
|
|
59
|
+
export interface PlanReviewReviewedArtifactDigest {
|
|
60
|
+
role: string;
|
|
61
|
+
path: string;
|
|
62
|
+
required: boolean;
|
|
63
|
+
sha256: string;
|
|
64
|
+
}
|
|
65
|
+
export interface PlanReviewOverride {
|
|
66
|
+
occurred: boolean;
|
|
67
|
+
at: string | null;
|
|
68
|
+
surface: string | null;
|
|
69
|
+
context: string | null;
|
|
70
|
+
}
|
|
71
|
+
export interface CreatePlanReviewArtifactInput {
|
|
72
|
+
changeName: string;
|
|
73
|
+
status: string;
|
|
74
|
+
reviewedAt: string;
|
|
75
|
+
pipeline: 'accelerated' | 'full';
|
|
76
|
+
persistenceMode: ArtifactGovernanceMode;
|
|
77
|
+
reviewerRole?: string;
|
|
78
|
+
comments?: readonly string[];
|
|
79
|
+
nonBlockingNotes?: readonly string[];
|
|
80
|
+
blockers?: readonly string[];
|
|
81
|
+
override?: PlanReviewOverride;
|
|
82
|
+
userOverrideContext?: string | null;
|
|
83
|
+
reviewedArtifacts: readonly PlanReviewReviewedArtifactInput[];
|
|
84
|
+
}
|
|
85
|
+
export interface PlanReviewArtifact {
|
|
86
|
+
schema: 'thoth-agents/sdd-plan-review/v1';
|
|
87
|
+
artifact: 'plan-review';
|
|
88
|
+
change: string;
|
|
89
|
+
gate: 'oracle-review';
|
|
90
|
+
status: string;
|
|
91
|
+
reviewerRole: string;
|
|
92
|
+
reviewedAt: string;
|
|
93
|
+
pipeline: 'accelerated' | 'full';
|
|
94
|
+
persistenceMode: ArtifactGovernanceMode;
|
|
95
|
+
memoryTopicKey: string;
|
|
96
|
+
reviewedArtifacts: readonly PlanReviewReviewedArtifactDigest[];
|
|
97
|
+
override: PlanReviewOverride;
|
|
98
|
+
}
|
|
99
|
+
export interface MaterializedPlanReviewArtifact {
|
|
100
|
+
descriptor: ArtifactLoaderDescriptor;
|
|
101
|
+
artifact: PlanReviewArtifact;
|
|
102
|
+
content: string;
|
|
103
|
+
}
|
|
104
|
+
export type ParsePlanReviewArtifactResult = {
|
|
105
|
+
ok: true;
|
|
106
|
+
artifact: PlanReviewArtifact;
|
|
107
|
+
} | {
|
|
108
|
+
ok: false;
|
|
109
|
+
reason: 'unparsable';
|
|
110
|
+
message: string;
|
|
111
|
+
};
|
|
112
|
+
export interface EvaluatePlanReviewRecoveryInput {
|
|
113
|
+
content: string | null | undefined;
|
|
114
|
+
currentArtifacts: Readonly<Record<string, string>>;
|
|
115
|
+
}
|
|
116
|
+
export interface PlanReviewRecoveryResult {
|
|
117
|
+
gateSatisfied: boolean;
|
|
118
|
+
implementationConfirmed: false;
|
|
119
|
+
decision: PlanReviewRecoveryDecision;
|
|
120
|
+
status: string | null;
|
|
121
|
+
staleArtifacts: readonly string[];
|
|
122
|
+
message: string;
|
|
123
|
+
}
|
|
52
124
|
export declare function getArtifactTopicKey(changeName: string, artifact: string): string;
|
|
53
125
|
export declare function getArtifactOpenSpecPath(changeName: string, artifact: string): string;
|
|
54
126
|
export declare function loadArtifactSnapshot(request: ArtifactLoaderRequest, dependencies?: ArtifactLoaderDependencies): Promise<ArtifactLoaderResult>;
|
|
127
|
+
export declare function createPlanReviewArtifact(input: CreatePlanReviewArtifactInput): MaterializedPlanReviewArtifact;
|
|
128
|
+
export declare function parsePlanReviewArtifact(content: string): ParsePlanReviewArtifactResult;
|
|
129
|
+
export declare function evaluatePlanReviewRecovery(input: EvaluatePlanReviewRecoveryInput): PlanReviewRecoveryResult;
|
|
55
130
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type { ArtifactComparisonMetadata, ArtifactLoaderDependencies, ArtifactLoaderDescriptor, ArtifactLoaderRequest, ArtifactLoaderResult, ArtifactSnapshot, ArtifactSnapshotInput, ArtifactSnapshotSource, } from './artifact-loader';
|
|
2
|
-
export { getArtifactOpenSpecPath, getArtifactTopicKey, loadArtifactSnapshot, } from './artifact-loader';
|
|
1
|
+
export type { ArtifactComparisonMetadata, ArtifactLoaderDependencies, ArtifactLoaderDescriptor, ArtifactLoaderRequest, ArtifactLoaderResult, ArtifactSnapshot, ArtifactSnapshotInput, ArtifactSnapshotSource, CreatePlanReviewArtifactInput, EvaluatePlanReviewRecoveryInput, MaterializedPlanReviewArtifact, ParsePlanReviewArtifactResult, PlanReviewArtifact, PlanReviewOverride, PlanReviewRecoveryDecision, PlanReviewRecoveryResult, PlanReviewReviewedArtifactDigest, PlanReviewReviewedArtifactInput, } from './artifact-loader';
|
|
2
|
+
export { createPlanReviewArtifact, evaluatePlanReviewRecovery, getArtifactOpenSpecPath, getArtifactTopicKey, loadArtifactSnapshot, parsePlanReviewArtifact, } from './artifact-loader';
|
|
3
3
|
export type { ValidateTasksArtifactPersistence, ValidateTasksArtifactRequest, } from './tasks-validator';
|
|
4
4
|
export { validateTasksArtifact } from './tasks-validator';
|
|
5
5
|
export type { ArtifactGovernanceEnforcementMode, ArtifactGovernanceFinding, ArtifactGovernanceMetadataValue, ArtifactGovernanceMode, ArtifactGovernanceReport, ArtifactGovernanceResult, ArtifactGovernanceSeverity, ArtifactGovernanceSummary, CreateArtifactGovernanceReportOptions, CreateArtifactGovernanceResultOptions, } from './types';
|
package/package.json
CHANGED
|
@@ -64,6 +64,7 @@ openspec/
|
|
|
64
64
|
├── contracts/ # optional sub-artifact subdir (gated)
|
|
65
65
|
├── quickstart.md # optional sub-artifact (gated)
|
|
66
66
|
├── tasks.md
|
|
67
|
+
├── plan-review.md
|
|
67
68
|
└── verify-report.md
|
|
68
69
|
```
|
|
69
70
|
|
|
@@ -77,6 +78,7 @@ openspec/
|
|
|
77
78
|
| Design | `openspec/changes/{change-name}/design.md` | Architecture and file plan; always produced |
|
|
78
79
|
| Sub-artifacts (optional, gated) | `openspec/changes/{change-name}/{research.md,data-model.md,contracts/,quickstart.md}` | Optional design sub-artifacts; gated by `rules.design.sub_artifacts` + `complexity_threshold` |
|
|
79
80
|
| Tasks | `openspec/changes/{change-name}/tasks.md` | Checkbox checklist updated by apply |
|
|
81
|
+
| Plan review | `openspec/changes/{change-name}/plan-review.md` | Oracle plan-review result with status, notes, blockers, override context, and SHA-256 reviewed-artifact freshness data |
|
|
80
82
|
| Verify report | `openspec/changes/{change-name}/verify-report.md` | Compliance matrix and evidence |
|
|
81
83
|
| Requirements checklist | `openspec/changes/{change-name}/checklists/requirements.md` | Domain-typed requirement-quality gate, consumed before tasks |
|
|
82
84
|
| Constitution | `openspec/memory/constitution.md` | Semver-versioned native principles + Sync-Impact Report |
|
|
@@ -85,6 +87,8 @@ openspec/
|
|
|
85
87
|
primarily persisted through thoth-mem topic keys when the mode includes
|
|
86
88
|
thoth-mem.
|
|
87
89
|
|
|
90
|
+
A saved `plan-review.md` approval is reusable only when it contains `[OKAY]` and every recorded reviewed-artifact SHA-256 digest still matches the current planning artifacts. Missing, stale, rejected, or unparsable plan-review evidence fails closed and requires a fresh Oracle review unless a separate explicit user override is captured through the normal blocking-input surface. A fresh plan-review approval satisfies only the plan-review gate; implementation confirmation remains separate.
|
|
91
|
+
|
|
88
92
|
The canonical OpenSpec copy is the filesystem representation of these artifacts
|
|
89
93
|
for `openspec` and `hybrid` modes. thoth-mem topic keys are the memory
|
|
90
94
|
representation when the mode includes thoth-mem; neither representation changes
|
|
@@ -118,6 +118,7 @@ context. Supplemental context does not replace the recall funnel.
|
|
|
118
118
|
- `sdd-spec` persists `sdd/{change-name}/spec`
|
|
119
119
|
- `sdd-design` persists `sdd/{change-name}/design`
|
|
120
120
|
- `sdd-tasks` persists `sdd/{change-name}/tasks`
|
|
121
|
+
- `plan-reviewer` returns a read-only result; the orchestrator or `quick` persistence helper persists `sdd/{change-name}/plan-review` and/or `openspec/changes/{change-name}/plan-review.md` according to the selected mode
|
|
121
122
|
- `sdd-apply` persists `sdd/{change-name}/apply-progress` and re-persists
|
|
122
123
|
updated `sdd/{change-name}/tasks`
|
|
123
124
|
- `sdd-verify` persists `sdd/{change-name}/verify-report`
|
|
@@ -150,6 +151,7 @@ original intent, accepted scope, deferred areas, and justified exclusions.
|
|
|
150
151
|
|
|
151
152
|
## Recovery Notes
|
|
152
153
|
|
|
154
|
+
- For plan-review recovery, accept saved approval only when canonical evidence contains `[OKAY]` and reviewed-artifact SHA-256 digests still match. Missing, stale, rejected, or unparsable evidence fails closed; user implementation confirmation remains a distinct later gate.
|
|
153
155
|
- Prefer exact topic-key queries over broad natural-language recall.
|
|
154
156
|
- Always apply the recall funnel (`mem_recall(mode="compact")` ->
|
|
155
157
|
`mem_recall(mode="context")` -> `mem_get(...)`) before treating memory as
|
|
@@ -46,6 +46,7 @@ Supported artifact names:
|
|
|
46
46
|
- `design`
|
|
47
47
|
- `design-brief`
|
|
48
48
|
- `tasks`
|
|
49
|
+
- `plan-review`
|
|
49
50
|
- `apply-progress`
|
|
50
51
|
- `verify-report`
|
|
51
52
|
- `archive-report`
|
|
@@ -69,6 +70,7 @@ artifacts:
|
|
|
69
70
|
spec: false # always false in accelerated pipeline
|
|
70
71
|
design: false # always false in accelerated pipeline
|
|
71
72
|
tasks: false
|
|
73
|
+
plan-review: false
|
|
72
74
|
apply-progress: false
|
|
73
75
|
verify-report: false
|
|
74
76
|
archive-report: false
|
|
@@ -29,6 +29,9 @@ mode.
|
|
|
29
29
|
The artifact governance validator is not part of this review. Plan-reviewer is
|
|
30
30
|
only the pre-execution approval gate for the task plan; it does not run the
|
|
31
31
|
validator, enforce its findings, or manage the future pre-`sdd-apply` handoff.
|
|
32
|
+
Plan-reviewer remains read-only: it returns the durable review payload, while the
|
|
33
|
+
orchestrator or `quick` persistence helper writes `plan-review.md` and/or
|
|
34
|
+
`sdd/{change-name}/plan-review` when the selected persistence mode requires it.
|
|
32
35
|
Invoke the semantic oracle role through the available role dispatch surface.
|
|
33
36
|
|
|
34
37
|
Focus on whether the plan can be executed as written, not whether you would have
|
|
@@ -168,6 +171,17 @@ Check only what affects executability:
|
|
|
168
171
|
|
|
169
172
|
## Output Format
|
|
170
173
|
|
|
174
|
+
Return the status token plus enough structured payload for durable persistence at
|
|
175
|
+
`openspec/changes/{change-name}/plan-review.md` and topic key
|
|
176
|
+
`sdd/{change-name}/plan-review` when the selected store includes those targets.
|
|
177
|
+
The persisted payload must preserve status, reviewer role, timestamp, pipeline,
|
|
178
|
+
persistence mode, comments, non-blocking notes, blockers, user override context
|
|
179
|
+
when applicable, and reviewed artifact freshness data. Use SHA-256 freshness
|
|
180
|
+
digests over reviewed artifact content when the coordinator asks for a concrete
|
|
181
|
+
manifest. Missing, stale, rejected, or unparsable saved evidence fails closed on
|
|
182
|
+
recovery. A fresh `[OKAY]` satisfies only plan-review; it is not implementation
|
|
183
|
+
confirmation.
|
|
184
|
+
|
|
171
185
|
If the plan is executable:
|
|
172
186
|
|
|
173
187
|
```text
|