thoth-agents 0.2.11 → 0.3.1

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.
Files changed (149) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +21 -0
  3. package/README.md +301 -311
  4. package/dist/agents/configured-role-prompt.d.ts +9 -0
  5. package/dist/agents/prompt-sections.d.ts +8 -4
  6. package/dist/agents/prompt-utils.d.ts +0 -4
  7. package/dist/{chunk-ASKXWU6E.js → chunk-2MZ5C2RN.js} +1078 -1725
  8. package/dist/chunk-XO74DXBZ.js +1781 -0
  9. package/dist/{chunk-6BNAV534.js → chunk-YUCGIJPP.js} +12 -30
  10. package/dist/cli/claude-code-install.d.ts +24 -26
  11. package/dist/cli/claude-code-paths.d.ts +0 -28
  12. package/dist/cli/codex-install.d.ts +2 -2
  13. package/dist/cli/codex-paths.d.ts +0 -2
  14. package/dist/cli/index.js +279 -119
  15. package/dist/cli/install.d.ts +5 -1
  16. package/dist/cli/model-catalog/cache.d.ts +1 -1
  17. package/dist/cli/operations/claude-code.d.ts +6 -3
  18. package/dist/cli/operations/codex.d.ts +2 -1
  19. package/dist/cli/operations/opencode.d.ts +2 -1
  20. package/dist/cli/operations/types.d.ts +9 -1
  21. package/dist/cli/package-root.d.ts +1 -0
  22. package/dist/cli/providers.d.ts +6 -116
  23. package/dist/cli/skills.d.ts +19 -32
  24. package/dist/cli/thoth-mem-install.d.ts +45 -0
  25. package/dist/cli/tui/components/StatusView.d.ts +12 -1
  26. package/dist/cli/tui/index.js +256 -142
  27. package/dist/cli/tui/operations.d.ts +4 -3
  28. package/dist/cli/types.d.ts +0 -10
  29. package/dist/config/constants.d.ts +20 -16
  30. package/dist/config/index.d.ts +0 -1
  31. package/dist/config/loader.d.ts +1 -1
  32. package/dist/config/schema.d.ts +2 -38
  33. package/dist/config/utils.d.ts +1 -2
  34. package/dist/harness/adapters/codex-surfaces.d.ts +3 -3
  35. package/dist/harness/core/agent-pack.d.ts +37 -29
  36. package/dist/harness/core/memory-governance.d.ts +24 -48
  37. package/dist/harness/core/sdd.d.ts +364 -131
  38. package/dist/harness/generate-integration-packages.d.ts +20 -0
  39. package/dist/harness/opencode-init-command.d.ts +11 -0
  40. package/dist/harness/types.d.ts +14 -1
  41. package/dist/harness/writers/claude-code-subagent.d.ts +3 -1
  42. package/dist/hooks/index.d.ts +0 -5
  43. package/dist/index.js +562 -1314
  44. package/dist/mcp/index.d.ts +1 -2
  45. package/package.json +17 -12
  46. package/plugin/.claude-plugin/.thoth-agents-plugin-assets.json +50 -0
  47. package/plugin/.claude-plugin/plugin.json +8 -0
  48. package/plugin/.codex-plugin/.thoth-agents-plugin-assets.json +16 -0
  49. package/plugin/.codex-plugin/plugin.json +7 -0
  50. package/plugin/.mcp.json +19 -0
  51. package/plugin/agents/deep.md +89 -0
  52. package/plugin/agents/designer.md +89 -0
  53. package/plugin/agents/explorer.md +90 -0
  54. package/plugin/agents/librarian.md +90 -0
  55. package/plugin/agents/oracle.md +92 -0
  56. package/plugin/agents/orchestrator.md +128 -0
  57. package/plugin/agents/quick.md +89 -0
  58. package/plugin/codex.mcp.json +17 -0
  59. package/plugin/settings.json +3 -0
  60. package/plugin/skills/thoth-archive/SKILL.md +40 -0
  61. package/plugin/skills/thoth-archive/scripts/archive.mjs +748 -0
  62. package/plugin/skills/thoth-constitution/SKILL.md +45 -0
  63. package/plugin/skills/thoth-constitution/scripts/validate.mjs +167 -0
  64. package/plugin/skills/thoth-constitution/templates/constitution.md +54 -0
  65. package/plugin/skills/thoth-init/SKILL.md +30 -0
  66. package/plugin/skills/thoth-init/scripts/init.mjs +141 -0
  67. package/plugin/skills/thoth-sdd/SKILL.md +83 -0
  68. package/plugin/skills/thoth-sdd/references/phases/analyze.md +21 -0
  69. package/plugin/skills/thoth-sdd/references/phases/checklist.md +20 -0
  70. package/plugin/skills/thoth-sdd/references/phases/clarify.md +15 -0
  71. package/plugin/skills/thoth-sdd/references/phases/converge.md +14 -0
  72. package/plugin/skills/thoth-sdd/references/phases/explore.md +10 -0
  73. package/plugin/skills/thoth-sdd/references/phases/implement.md +19 -0
  74. package/plugin/skills/thoth-sdd/references/phases/plan.md +15 -0
  75. package/plugin/skills/thoth-sdd/references/phases/specify.md +21 -0
  76. package/plugin/skills/thoth-sdd/references/phases/tasks.md +20 -0
  77. package/plugin/skills/thoth-sdd/references/phases/verify.md +22 -0
  78. package/plugin/skills/thoth-sdd/scripts/validate.mjs +1117 -0
  79. package/plugin/skills/thoth-sdd/templates/archive-report.md +25 -0
  80. package/plugin/skills/thoth-sdd/templates/checklist.md +27 -0
  81. package/plugin/skills/thoth-sdd/templates/plan.md +38 -0
  82. package/plugin/skills/thoth-sdd/templates/spec.md +54 -0
  83. package/plugin/skills/thoth-sdd/templates/tasks.md +29 -0
  84. package/plugin/skills/thoth-sdd/templates/verify-report.md +28 -0
  85. package/skills/README.md +12 -0
  86. package/skills/thoth-archive/SKILL.md +40 -0
  87. package/skills/thoth-archive/scripts/archive.mjs +748 -0
  88. package/skills/thoth-constitution/SKILL.md +45 -0
  89. package/skills/thoth-constitution/scripts/validate.mjs +167 -0
  90. package/skills/thoth-constitution/templates/constitution.md +54 -0
  91. package/skills/thoth-init/SKILL.md +30 -0
  92. package/skills/thoth-init/scripts/init.mjs +141 -0
  93. package/skills/thoth-sdd/SKILL.md +83 -0
  94. package/skills/thoth-sdd/references/phases/analyze.md +21 -0
  95. package/skills/thoth-sdd/references/phases/checklist.md +20 -0
  96. package/skills/thoth-sdd/references/phases/clarify.md +15 -0
  97. package/skills/thoth-sdd/references/phases/converge.md +14 -0
  98. package/skills/thoth-sdd/references/phases/explore.md +10 -0
  99. package/skills/thoth-sdd/references/phases/implement.md +19 -0
  100. package/skills/thoth-sdd/references/phases/plan.md +15 -0
  101. package/skills/thoth-sdd/references/phases/specify.md +21 -0
  102. package/skills/thoth-sdd/references/phases/tasks.md +20 -0
  103. package/skills/thoth-sdd/references/phases/verify.md +22 -0
  104. package/skills/thoth-sdd/scripts/validate.mjs +1117 -0
  105. package/skills/thoth-sdd/templates/archive-report.md +25 -0
  106. package/skills/thoth-sdd/templates/checklist.md +27 -0
  107. package/skills/thoth-sdd/templates/plan.md +38 -0
  108. package/skills/thoth-sdd/templates/spec.md +54 -0
  109. package/skills/thoth-sdd/templates/tasks.md +29 -0
  110. package/skills/thoth-sdd/templates/verify-report.md +28 -0
  111. package/thoth-agents.schema.json +0 -39
  112. package/dist/chunk-OZE7JVGS.js +0 -2344
  113. package/dist/cli/custom-skills.d.ts +0 -49
  114. package/dist/cli/skill-manifest.d.ts +0 -32
  115. package/dist/harness/core/skills.d.ts +0 -211
  116. package/dist/harness/generate-codex-plugin.d.ts +0 -9
  117. package/dist/harness/writers/claude-code-skill-layout.d.ts +0 -16
  118. package/dist/harness/writers/fs-skill-collect.d.ts +0 -7
  119. package/dist/harness/writers/skill-layout.d.ts +0 -16
  120. package/dist/hooks/chat-headers.d.ts +0 -16
  121. package/dist/hooks/phase-reminder/index.d.ts +0 -28
  122. package/dist/hooks/post-read-nudge/index.d.ts +0 -18
  123. package/dist/hooks/skill-sync.d.ts +0 -10
  124. package/dist/hooks/thoth-mem/index.d.ts +0 -46
  125. package/dist/hooks/thoth-mem/protocol.d.ts +0 -7
  126. package/dist/mcp/thoth.d.ts +0 -3
  127. package/dist/sdd/artifact-governance/artifact-loader.d.ts +0 -130
  128. package/dist/sdd/artifact-governance/index.d.ts +0 -6
  129. package/dist/sdd/artifact-governance/tasks-validator.d.ts +0 -17
  130. package/dist/sdd/artifact-governance/types.d.ts +0 -52
  131. package/dist/thoth/client.d.ts +0 -14
  132. package/dist/thoth/index.d.ts +0 -2
  133. package/src/skills/_shared/openspec-convention.md +0 -350
  134. package/src/skills/_shared/persistence-contract.md +0 -163
  135. package/src/skills/_shared/thoth-mem-convention.md +0 -123
  136. package/src/skills/executing-plans/SKILL.md +0 -288
  137. package/src/skills/plan-reviewer/SKILL.md +0 -219
  138. package/src/skills/requirements-interview/SKILL.md +0 -233
  139. package/src/skills/sdd-apply/SKILL.md +0 -89
  140. package/src/skills/sdd-archive/SKILL.md +0 -92
  141. package/src/skills/sdd-clarify/SKILL.md +0 -105
  142. package/src/skills/sdd-constitution/SKILL.md +0 -107
  143. package/src/skills/sdd-design/SKILL.md +0 -155
  144. package/src/skills/sdd-init/SKILL.md +0 -233
  145. package/src/skills/sdd-propose/SKILL.md +0 -101
  146. package/src/skills/sdd-spec/SKILL.md +0 -136
  147. package/src/skills/sdd-tasks/SKILL.md +0 -232
  148. package/src/skills/sdd-verify/SKILL.md +0 -131
  149. package/src/skills/thoth-mem-agents/SKILL.md +0 -210
@@ -1,52 +0,0 @@
1
- export declare const ARTIFACT_GOVERNANCE_SEVERITIES: readonly ["error", "warning", "info"];
2
- export type ArtifactGovernanceSeverity = (typeof ARTIFACT_GOVERNANCE_SEVERITIES)[number];
3
- export declare const ARTIFACT_GOVERNANCE_MODES: readonly ["none", "thoth-mem", "openspec", "hybrid"];
4
- export type ArtifactGovernanceMode = (typeof ARTIFACT_GOVERNANCE_MODES)[number];
5
- export declare const ARTIFACT_GOVERNANCE_ENFORCEMENT_MODES: readonly ["report-only"];
6
- export type ArtifactGovernanceEnforcementMode = (typeof ARTIFACT_GOVERNANCE_ENFORCEMENT_MODES)[number];
7
- export type ArtifactGovernanceMetadataValue = string | number | boolean | null;
8
- export interface ArtifactGovernanceFinding {
9
- code: string;
10
- severity: ArtifactGovernanceSeverity;
11
- message: string;
12
- path?: string;
13
- line?: number;
14
- column?: number;
15
- detail?: string;
16
- source?: string;
17
- metadata?: Readonly<Record<string, ArtifactGovernanceMetadataValue>>;
18
- }
19
- export interface ArtifactGovernanceSummary {
20
- total: number;
21
- errorCount: number;
22
- warningCount: number;
23
- infoCount: number;
24
- highestSeverity: ArtifactGovernanceSeverity | null;
25
- }
26
- export interface ArtifactGovernanceReport {
27
- mode: ArtifactGovernanceMode;
28
- enforcementMode: ArtifactGovernanceEnforcementMode;
29
- findings: readonly ArtifactGovernanceFinding[];
30
- summary: ArtifactGovernanceSummary;
31
- valid: boolean;
32
- shouldBlock: boolean;
33
- }
34
- export interface ArtifactGovernanceResult extends ArtifactGovernanceReport {
35
- validator: string;
36
- artifact: string;
37
- report: ArtifactGovernanceReport;
38
- }
39
- export interface CreateArtifactGovernanceReportOptions {
40
- mode?: ArtifactGovernanceMode;
41
- enforcementMode?: ArtifactGovernanceEnforcementMode;
42
- findings?: readonly ArtifactGovernanceFinding[];
43
- }
44
- export interface CreateArtifactGovernanceResultOptions extends CreateArtifactGovernanceReportOptions {
45
- validator: string;
46
- artifact: string;
47
- }
48
- export declare function isArtifactGovernanceSeverity(value: string): value is ArtifactGovernanceSeverity;
49
- export declare function getHighestArtifactGovernanceSeverity(findings: readonly ArtifactGovernanceFinding[]): ArtifactGovernanceSeverity | null;
50
- export declare function summarizeArtifactGovernanceFindings(findings: readonly ArtifactGovernanceFinding[]): ArtifactGovernanceSummary;
51
- export declare function createArtifactGovernanceReport(options?: CreateArtifactGovernanceReportOptions): ArtifactGovernanceReport;
52
- export declare function createArtifactGovernanceResult(options: CreateArtifactGovernanceResultOptions): ArtifactGovernanceResult;
@@ -1,14 +0,0 @@
1
- export interface CreateThothClientOptions {
2
- project: string;
3
- directory?: string;
4
- httpPort?: number;
5
- timeoutMs?: number;
6
- enabled?: boolean;
7
- }
8
- export interface ThothClient {
9
- readonly enabled: boolean;
10
- memContext(sessionId?: string, limit?: number): Promise<string | null>;
11
- memSessionStart(sessionId: string): Promise<boolean>;
12
- memSavePrompt(sessionId: string, content: string): Promise<boolean>;
13
- }
14
- export declare function createThothClient(options: CreateThothClientOptions): ThothClient;
@@ -1,2 +0,0 @@
1
- export type { CreateThothClientOptions, ThothClient } from './client';
2
- export { createThothClient } from './client';
@@ -1,350 +0,0 @@
1
- # OpenSpec Convention
2
-
3
- ## Harness Scope
4
-
5
- OpenSpec artifacts are harness-independent filesystem artifacts. The canonical
6
- `openspec/` paths, filenames, and archive layout do not change across adapter
7
- bindings.
8
-
9
- This file defines harness-neutral artifact semantics. Any runtime-specific file
10
- read/write, delegation, or blocking user input surface is an adapter binding
11
- and must preserve the canonical behavior described here. If a runtime lacks a
12
- required primitive, treat it as an unsupported-capability and report the
13
- limitation instead of changing artifact semantics.
14
-
15
- ## Mode Scope
16
-
17
- This convention applies only when the artifact store mode includes OpenSpec:
18
- `openspec` and `hybrid`.
19
-
20
- - In `thoth-mem` mode, skip canonical `openspec/` file writes.
21
- - In `thoth-mem` mode, skip filesystem artifact recovery.
22
-
23
- ## Pre-flight Validation
24
-
25
- When the selected persistence mode includes OpenSpec (`openspec` or `hybrid`),
26
- every SDD skill must verify this structure before proceeding:
27
-
28
- 1. `openspec/config.yaml` exists
29
- 2. `openspec/specs/` exists
30
- 3. `openspec/changes/` exists
31
-
32
- If any required item is missing:
33
-
34
- - STOP and inform the orchestrator that `openspec/` is not initialized.
35
- - Recommend running the `sdd-init` skill first.
36
- - Do NOT attempt to create the structure in that skill.
37
-
38
- If the required items exist but the project is stale (`config.yaml` is missing
39
- one or more mechanism sections / toggles, or `openspec/memory/constitution.md`
40
- is absent):
41
-
42
- - Recommend running the `sdd-init` skill to additively realign the project.
43
- - Do NOT attempt to backfill the missing pieces in that skill.
44
-
45
- If all required items exist and no mechanism pieces are missing, continue
46
- normally.
47
-
48
- ## Directory Structure
49
-
50
- ```text
51
- openspec/
52
- ├── config.yaml
53
- ├── specs/
54
- │ └── {domain}/spec.md
55
- └── changes/
56
- ├── archive/
57
- └── {change-name}/
58
- ├── proposal.md
59
- ├── specs/
60
- │ └── {domain}/spec.md # clarified in place by the clarify phase
61
- ├── design.md
62
- ├── research.md # optional sub-artifact (gated)
63
- ├── data-model.md # optional sub-artifact (gated)
64
- ├── contracts/ # optional sub-artifact subdir (gated)
65
- ├── quickstart.md # optional sub-artifact (gated)
66
- ├── tasks.md
67
- ├── plan-review.md
68
- └── verify-report.md
69
- ```
70
-
71
- ## Canonical Artifacts
72
-
73
- | Artifact | Canonical path | Notes |
74
- | --- | --- | --- |
75
- | Proposal | `openspec/changes/{change-name}/proposal.md` | Intent, scope, approach |
76
- | Delta specs | `openspec/changes/{change-name}/specs/{domain}/spec.md` | Use one file per domain |
77
- | Main specs | `openspec/specs/{domain}/spec.md` | Source of truth after archive |
78
- | Design | `openspec/changes/{change-name}/design.md` | Architecture and file plan; always produced |
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` |
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 |
82
- | Verify report | `openspec/changes/{change-name}/verify-report.md` | Compliance matrix and evidence |
83
- | Requirements checklist | `openspec/changes/{change-name}/checklists/requirements.md` | Domain-typed requirement-quality gate, consumed before tasks |
84
- | Constitution | `openspec/memory/constitution.md` | Semver-versioned native principles + Sync-Impact Report |
85
-
86
- `apply-progress` and `archive-report` are durable SDD artifacts, but they are
87
- primarily persisted through thoth-mem topic keys when the mode includes
88
- thoth-mem.
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
-
92
- The canonical OpenSpec copy is the filesystem representation of these artifacts
93
- for `openspec` and `hybrid` modes. thoth-mem topic keys are the memory
94
- representation when the mode includes thoth-mem; neither representation changes
95
- the harness-neutral artifact names or lifecycle.
96
-
97
- Delegated handoff summaries are not OpenSpec artifacts. They are root-owned
98
- session summary context when thoth-mem is available, while subagent prompts
99
- carry recovery instructions and continue to use the canonical OpenSpec paths
100
- above for filesystem artifact recovery.
101
-
102
- ## Writing Rules
103
-
104
- - Preserve canonical filenames and locations.
105
- - Read an existing artifact before rewriting it.
106
- - Keep change-specific artifacts under
107
- `openspec/changes/{change-name}/...`.
108
- - Keep long-lived specs under `openspec/specs/{domain}/spec.md`.
109
- - Archive completed changes under
110
- `openspec/changes/archive/YYYY-MM-DD-{change-name}/`.
111
-
112
- ## Artifact Content Rules
113
-
114
- - `proposal.md` explains why the change exists.
115
- - `spec.md` uses RFC 2119 keywords and Given/When/Then scenarios (full pipeline only).
116
- - The `clarify` phase (full pipeline only) resolves residual spec ambiguity in
117
- place between `spec` and `design`, editing the delta `spec.md` files under the
118
- same path and re-saving the `sdd/{change-name}/spec` key; it produces no new
119
- artifact.
120
- - `design.md` explains how the change will be implemented (full pipeline only).
121
- It MAY be accompanied by optional, gated sub-artifacts (`research.md`,
122
- `data-model.md`, `contracts/`, `quickstart.md`).
123
- - `tasks.md` is phase-based and uses Markdown checkboxes.
124
- - `verify-report.md` maps acceptance criteria to executed evidence: spec
125
- scenarios in full pipeline, proposal success criteria in accelerated pipeline.
126
-
127
- Progress tracking surfaces may mirror task status for user visibility, but
128
- `tasks.md` remains the canonical OpenSpec task artifact whenever the selected
129
- persistence mode includes OpenSpec.
130
-
131
- ## `config.yaml` Shape
132
-
133
- `rules:` carries one section per phase or mechanism. A section is EITHER a
134
- bare list of guidance strings OR a mapping. When a phase needs both human
135
- guidance and machine-relevant scalar toggles, the guidance list lives under a
136
- `guidance:` subkey alongside the scalars (mixing bare `- item` sequence entries
137
- with `key: value` scalars under the same key is invalid YAML).
138
-
139
- ```yaml
140
- schema: spec-driven
141
-
142
- context: |
143
- Project background, stack, and constraints.
144
-
145
- rules:
146
- proposal:
147
- - Include rollback plan for risky changes
148
- - Identify affected modules/packages
149
- spec:
150
- - Use RFC 2119 keywords (MUST, SHALL, SHOULD, MAY)
151
- - Use Given/When/Then scenarios
152
- design:
153
- guidance:
154
- - Document architecture decisions with rationale
155
- - Require a File Changes section
156
- sub_artifacts: false # optional design sub-artifacts (default off)
157
- complexity_threshold: # author-evaluated eligibility triggers (OR)
158
- affected_domains: 3
159
- affected_files: 12
160
- external_research: true
161
- tasks:
162
- guidance:
163
- - Group tasks by phase with hierarchical numbering
164
- - Require a per-task Verification block
165
- tdd: false # TDD ordering flag (sdd-tasks-format)
166
- traceability: true # require [USN] + Spec: tag + Independent Test per task
167
- parallel_markers: false # [P] emission + executing-plans consumption (default off)
168
- apply:
169
- guidance:
170
- - Follow existing code patterns and conventions
171
- test_command: ''
172
- verify:
173
- test_command: ''
174
- build_command: ''
175
- coverage_threshold: 0
176
- archive:
177
- - Warn before destructive merges
178
-
179
- # --- mechanism sections (spec-kit-rigor) ---
180
- constitution:
181
- path: openspec/memory/constitution.md
182
- enforce_check: true # Constitution Check gate blocks on violation
183
- version_policy: semver # MAJOR=remove/redefine, MINOR=add, PATCH=clarify
184
- consistency:
185
- enforce_block: true # CRITICAL findings block plan-review
186
- require_coverage_percentage: true
187
- requirements_quality:
188
- enforce_block: true # incomplete checklist blocks tasks phase
189
- dimensions: [completeness, clarity, measurability, testability]
190
- clarification:
191
- max_markers_per_spec: 3 # [NEEDS CLARIFICATION] cap enforced by plan-reviewer
192
- handoffs:
193
- surface_hints: true # surface SddPhaseContract.handoffHints at transitions
194
- ```
195
-
196
- Treat `rules` entries as mandatory phase-specific constraints whenever present.
197
- Missing `enforce_*` keys default to enforcing; a section that sets its
198
- `enforce_*` key to `false` downgrades the corresponding block to a report.
199
-
200
- ## Parallel Task Markers
201
-
202
- `sdd-tasks` MAY annotate a task with an optional `[P]` marker placed AFTER the
203
- `N.M` number (`- [ ] 2.1 [P] Title`), never before it. Placement after the
204
- number keeps the `tasks-validator` `TASK_NUMBERING` regex green with no
205
- validator change. `[P]` declares the task is dependency-free of the other
206
- `[P]`-marked tasks in the SAME phase and targets the same execution agent;
207
- `executing-plans` consumes a contiguous `[P]` run as one explicit parallel batch
208
- (recommending worktree isolation for overlapping writers). Both emission and
209
- consumption are gated by `rules.tasks.parallel_markers` (default off);
210
- back-compat: an absent marker or disabled toggle executes exactly as today.
211
-
212
- ## Constitution Governance
213
-
214
- The project constitution lives at `openspec/memory/constitution.md` and holds
215
- NATIVE thoth-agents principles (delegate-first coordination, read-only role
216
- boundaries, governed persistence, multi-harness parity, evidence-led
217
- verification). It is NOT spec-kit's articles; only the mechanics of versioned
218
- governance are adopted.
219
-
220
- - **Version**: a semantic version `MAJOR.MINOR.PATCH` in the header, with
221
- `Ratified` and `Last-Amended` dates. `sdd-init` bootstraps it at `1.0.0`
222
- when absent and preserves the existing content and version when present
223
- (idempotent).
224
- - **Semver bump policy** (manual, performed by the editor): MAJOR = a principle
225
- is removed or redefined; MINOR = a principle is added or guidance materially
226
- expanded; PATCH = clarification or wording. There is no runtime parser, so
227
- the policy is enforced by prose, not tooling.
228
- - **Sync-Impact Report**: an in-file `## Sync-Impact Report` section (newest
229
- entry on top) listing version, change type, principles touched, and the
230
- downstream gates/artifacts affected.
231
- - **Constitution Check gate**: a procedural gate owned jointly by `sdd-design`
232
- (self-review while authoring) and `plan-reviewer` (independent enforcement).
233
- It reuses the existing `oracle-review` gate plumbing — no new `gate` enum
234
- value. On a detected violation it BLOCKS advancement; the block is
235
- overridable only through an explicit user decision delivered via the harness
236
- blocking-input surface (AskUserQuestion-equivalent), and the override MUST be
237
- logged with the violated principle. Gated by `rules.constitution`; when
238
- `enforce_check: false`, the check does not block and the skip is noted.
239
-
240
- ### Constitution Amendment
241
-
242
- The AMENDMENT side of the lifecycle is performed by the `sdd-constitution`
243
- skill. It executes a guided, human-confirmed semver bump (reusing the Semver
244
- bump policy above), updates the `Last-Amended` date, and PREPENDS one
245
- `## Sync-Impact Report` entry in the format
246
- `- X.Y.Z | change type | principles touched | downstream gates/artifacts affected`
247
- (newest entry on top).
248
-
249
- - The ONLY writable target of the amendment is
250
- `openspec/memory/constitution.md`.
251
- - The bump is human-confirmed via the harness blocking-input surface
252
- (AskUserQuestion-equivalent) BEFORE any version is written. There is no
253
- runtime parser and no auto-bump; the level is never selected automatically.
254
- - When no principle change is warranted the skill performs a reported no-op and
255
- writes nothing.
256
- - It preserves all existing content and ALL prior Sync-Impact Report entries;
257
- it only prepends the new entry and updates the version/date fields.
258
-
259
- ### Read-Only Assets and Report-Only Propagation
260
-
261
- When the plugin is INSTALLED in a harness (OpenCode / Codex), bundled skills are
262
- READ-ONLY assets. The `sdd-constitution` skill MUST NOT edit, create, or delete
263
- any other `SKILL.md`, any file under `src/`, or any template — its single
264
- writable target is the end-user `openspec/memory/constitution.md`.
265
-
266
- Because the enforcement gates (`sdd-design`, `plan-reviewer`) read the
267
- constitution LIVE, there are NO static principle copies to realign. Propagation
268
- is therefore report-only: the Sync-Impact Report entry DOCUMENTS which
269
- downstream gates consume the changed principles, and the skill FLAGS any
270
- in-flight change `design.md` / `tasks.md` that reference now-changed principles
271
- for HUMAN re-review instead of editing them.
272
-
273
- ### Amendment Auto-Suggest (shared snippet)
274
-
275
- `sdd-verify` and `sdd-archive` REFERENCE this single canonical snippet (they do
276
- NOT inline it) to surface a report-only amendment suggestion.
277
-
278
- > **Constitution amendment auto-suggest (report-only).** A completed change is
279
- > "governance-touching" when ANY holds: its `proposal.md` Impact/Affected
280
- > Areas, `design.md`, `tasks.md`, or delta `spec.md` reference
281
- > `openspec/memory/constitution.md`, "the constitution," or a named principle;
282
- > OR it modifies `src/skills/_shared/openspec-convention.md` (Constitution
283
- > Governance) or `openspec/memory/constitution.md`; OR any artifact names a
284
- > constitution principle by title. When governance-touching, surface a
285
- > NON-BLOCKING suggestion: "This change touched governance/principles —
286
- > consider running `sdd-constitution` to record a constitution amendment." This
287
- > suggestion is advisory only; it MUST NOT block verification or archival.
288
-
289
- ### config.yaml mechanism-section backfill
290
-
291
- `sdd-init` realignment backfills the `config.yaml` mechanism sections
292
- (`constitution`, `consistency`, `requirements_quality`, `clarification`,
293
- `handoffs`) and the `rules.tasks.traceability` / `rules.verify` toggles
294
- additively, mirroring the constitution idempotency above.
295
-
296
- - It MUST detect per-section absence independently and merge ONLY the absent
297
- sections / toggles into the existing `config.yaml`.
298
- - It MUST NOT overwrite any value that is already present; every existing key
299
- and value is preserved verbatim.
300
- - It MUST report which sections / toggles were added.
301
- - It is idempotent: re-running on a project whose `config.yaml` already carries
302
- every mechanism section / toggle is a reported no-op.
303
-
304
- ## Consistency Severity and Coverage Model
305
-
306
- `plan-reviewer` performs cross-artifact consistency analysis across
307
- proposal<->spec<->design<->tasks IN ADDITION to its executability review (it is
308
- NOT a new phase). Each finding carries a severity of `CRITICAL`, `HIGH`,
309
- `MEDIUM`, or `LOW`.
310
-
311
- - **Blocking gate**: any `CRITICAL` finding BLOCKS advancement past plan
312
- review; non-CRITICAL findings are reported but do not block. The block is
313
- overridable only through an explicit, logged user decision via the harness
314
- blocking-input surface. Gated by `rules.consistency.enforce_block`.
315
- - **Requirement-coverage percentage**: `(distinct spec requirements named by
316
- >=1 task Spec: tag) / (total ### Requirement: headings across all delta
317
- specs)`, e.g. 8 of 10 covered -> 80%. The percentage MUST appear in the
318
- review output (gated by `rules.consistency.require_coverage_percentage`).
319
-
320
- ## Requirements-Quality Checklist
321
-
322
- `sdd-spec` generates a domain-typed requirements-quality checklist at
323
- `openspec/changes/{change-name}/checklists/requirements.md` ("unit tests for
324
- English"). It has one `## Domain: {domain}` section per authored delta domain,
325
- each with checkbox items across four dimensions: completeness, clarity,
326
- measurability, testability. Items use the task checkbox states (`- [ ]` /
327
- `- [x]` / `- [-] waived: reason`). The spec->tasks transition is GATED on every
328
- item being `- [x]` or explicitly waived; an incomplete checklist blocks
329
- (overridable + logged) unless `rules.requirements_quality.enforce_block: false`.
330
-
331
- ## Clarification Discipline
332
-
333
- Spec authoring may use `[NEEDS CLARIFICATION: <question>]` markers for genuine
334
- unresolved decision forks, capped at `rules.clarification.max_markers_per_spec`
335
- (default 3) per spec file. Follow an informed-guess-first policy: when an
336
- ambiguity has a defensible default, apply it and record it in the spec's
337
- `## Assumptions` section rather than emitting a marker; reserve markers for
338
- forks with no defensible default. `plan-reviewer` flags any spec file exceeding
339
- the cap.
340
-
341
- ## Handoff Hints
342
-
343
- `SddPhaseContract` (in `src/harness/core/sdd.ts`) carries an optional
344
- `handoffHints?: string[]`; a phase declares what the next phase must preserve
345
- (accepted scope, recorded assumptions, coverage/architecture decisions). The
346
- field is OPTIONAL — phases without hints stay valid and existing consumers run
347
- unchanged. SDD skills SURFACE the upstream phase's `handoffHints` in their prose
348
- at the transition; when absent, no handoff text is surfaced. Gated by
349
- `rules.handoffs.surface_hints` (when `false`, hints are not surfaced while the
350
- contract field stays valid).
@@ -1,163 +0,0 @@
1
- # Persistence Contract
2
-
3
- ## Supported Persistence Modes
4
-
5
- | Mode | Read order | Write targets | Use when |
6
- | --- | --- | --- | --- |
7
- | `thoth-mem` | thoth-mem only | thoth-mem only | The user wants no repo artifact changes |
8
- | `openspec` | filesystem only | OpenSpec files only | The user wants visible repo artifacts without memory overhead |
9
- | `hybrid` | thoth-mem, then filesystem fallback | thoth-mem and OpenSpec files | The change should survive compaction and exist in the repo |
10
- | `none` | orchestrator prompt context only | nowhere (inline response only) | Ephemeral exploration, privacy-sensitive work, or no persistence backend available |
11
-
12
- SDD skills must obey the selected artifact store mode.
13
-
14
- ## Mode Rules
15
-
16
- ### `thoth-mem`
17
-
18
- 1. Read SDD artifacts from thoth-mem only.
19
- 2. Write SDD artifacts to thoth-mem only.
20
- 3. Do not create or modify canonical `openspec/` artifacts.
21
-
22
- ### `openspec`
23
-
24
- 1. Read SDD artifacts from canonical OpenSpec paths only.
25
- 2. Write SDD artifacts to canonical OpenSpec paths only.
26
- 3. Do not call thoth-mem save or recovery tools.
27
-
28
- ### `none`
29
-
30
- 1. Read SDD artifacts from orchestrator prompt context only.
31
- 2. Do not persist artifacts to any external store.
32
- 3. Return all artifacts as inline text in the response.
33
- 4. Do not call thoth-mem save tools.
34
- 5. Do not create or modify OpenSpec files.
35
- 6. Recommend enabling `thoth-mem` or `openspec` for persistent work.
36
-
37
- ## Hybrid Rules
38
-
39
- When running in `hybrid` mode:
40
-
41
- 1. Write the canonical OpenSpec artifact to the filesystem.
42
- 2. Persist the same full artifact to thoth-mem with deterministic `topic_key`.
43
- 3. Treat the operation as complete only when both writes succeed.
44
- 4. If filesystem and memory diverge, repair immediately from the freshest full
45
- artifact.
46
-
47
- ## Memory Ownership
48
-
49
- Memory responsibilities are split by semantic role:
50
-
51
- **Orchestrator owns general/root continuity memory:**
52
- - decisions, discoveries, bug fixes, and user constraints
53
- - root progress checkpoints and summaries (`mem_session(action="checkpoint"|"summary")`)
54
- - prompt persistence (`mem_save(kind="prompt")`)
55
-
56
- **Sub-agents write deterministic SDD artifacts when delegated:**
57
- - canonical SDD artifacts using `sdd/{change}/{artifact}`
58
- - includes proposal, spec, design, tasks, apply-progress, verify-report,
59
- archive-report, and state
60
- - sub-agents may also write delegated durable implementation observations only
61
- when explicitly authorized under parent session/project
62
- - sub-agents do not own session lifecycle operations and do not save prompts
63
-
64
- In harnesses without hard enforcement, keep this as instruction-level
65
- governance and disclose unsupported-capability limitations.
66
-
67
- ## Delegated Handoffs
68
-
69
- Root/orchestrator handoffs are compaction boundaries. When root-owned summary or
70
- checkpoint tools are available, root refreshes handoff continuity with
71
- `mem_session(action="checkpoint"|"summary")` or root-owned
72
- `mem_save(kind="session_summary")`.
73
-
74
- Initial subagent prompts include task instructions, parent `session_id`,
75
- project, persistence mode, memory permissions, and recovery instructions. They
76
- must not include raw handoff bodies, transcripts, secrets, or generated prompts.
77
- Subagents recover context through bounded recall before using memory as source
78
- material.
79
-
80
- If parent identity or root summary/checkpoint tooling is unavailable, report
81
- that compaction could not be persisted and continue with explicit local context.
82
- Subagents must not create fallback sessions.
83
-
84
- ## Retrieval Protocol
85
-
86
- ### Recall funnel for thoth-mem and hybrid modes
87
-
88
- Always complete the recall funnel before using memory content as source
89
- material:
90
-
91
- 1. `mem_recall(mode="compact")` — scan candidate IDs/titles with exact topic-key
92
- or focused query terms.
93
- 2. `mem_recall(mode="context")` — expand the strongest hits into retrieved text.
94
- 3. `mem_get(id=...)` — fetch full content; use
95
- `mem_get(include_timeline=true)` when chronology matters.
96
-
97
- Use HyDE/fused hybrid recall (sentence + chunk vectors, FTS, KG enrichment) for
98
- semantic or ambiguous searches; narrow with `topic_key`, `type`, `time_from`,
99
- `time_to`, `scope`, `project`, and `session_id` filters; use
100
- `mem_context(recall_query=...)` or bounded
101
- `mem_project(action="graph"|"topics"|"topic")` for supplemental project
102
- context. Supplemental context does not replace the recall funnel.
103
-
104
- ### Mode-specific retrieval
105
-
106
- 1. If mode is `thoth-mem`, use the recall funnel with exact SDD topic key.
107
- 2. If mode is `openspec`, read canonical OpenSpec files only.
108
- 3. If mode is `hybrid`, use the recall funnel first.
109
- 4. In `hybrid`, if nothing is found in thoth-mem, read canonical OpenSpec
110
- files as fallback.
111
- 5. In `hybrid`, if filesystem fallback succeeds, re-save the artifact to
112
- thoth-mem to converge both stores.
113
- 6. If mode is `none`, use orchestrator prompt context only.
114
-
115
- ## Artifact Ownership
116
-
117
- - `sdd-propose` persists `sdd/{change-name}/proposal`
118
- - `sdd-spec` persists `sdd/{change-name}/spec`
119
- - `sdd-design` persists `sdd/{change-name}/design`
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
122
- - `sdd-apply` persists `sdd/{change-name}/apply-progress` and re-persists
123
- updated `sdd/{change-name}/tasks`
124
- - `sdd-verify` persists `sdd/{change-name}/verify-report`
125
- - `sdd-archive` persists `sdd/{change-name}/archive-report`
126
- - `state` persists `sdd/{change-name}/state`
127
-
128
- ## Governance Placement
129
-
130
- - Artifact governance validator is report-only.
131
- - It runs after `sdd-tasks` and before any `sdd-apply` entrypoint consumes the
132
- report.
133
- - It does not replace `plan-reviewer` or `executing-plans`.
134
- - Root-session memory/progress ownership remains orchestrator-owned.
135
-
136
- ## Pipeline Type Impact on Prerequisites
137
-
138
- The orchestrator passes `pipeline-type` (`accelerated` or `full`) alongside
139
- persistence mode, affecting required artifacts:
140
-
141
- | Artifact | Full pipeline | Accelerated pipeline |
142
- | --- | --- | --- |
143
- | Proposal | Required by all phases | Required by all phases (acceptance reference) |
144
- | Spec | Required by design, tasks, apply, verify, archive | Not produced; not required |
145
- | Design | Required by tasks, apply, verify, archive | Not produced; not required |
146
- | Tasks | Required by apply, verify, archive | Required by apply, verify, archive |
147
- | Verify report | Required by archive | Required by archive |
148
-
149
- In accelerated mode, proposal is the acceptance reference and must preserve
150
- original intent, accepted scope, deferred areas, and justified exclusions.
151
-
152
- ## Recovery Notes
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.
155
- - Prefer exact topic-key queries over broad natural-language recall.
156
- - Always apply the recall funnel (`mem_recall(mode="compact")` ->
157
- `mem_recall(mode="context")` -> `mem_get(...)`) before treating memory as
158
- source material.
159
- - In `openspec`, repair missing/stale artifacts by rewriting canonical OpenSpec
160
- files.
161
- - In `thoth-mem`, repair missing/stale artifacts by re-saving full artifacts via
162
- `mem_save`.
163
- - In `hybrid`, use filesystem fallback only for recovery, then converge stores.