@open-agent-toolkit/cli 0.2.19 → 0.2.21
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/assets/config/dispatch-matrix-recommendation.json +15 -5
- package/assets/docs/cli-utilities/configuration.md +10 -5
- package/assets/docs/contributing/index.md +1 -0
- package/assets/docs/contributing/verifying-cursor-pins.md +282 -0
- package/assets/docs/workflows/projects/artifacts.md +1 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +50 -4
- package/assets/docs/workflows/skills/explainer-kit.md +188 -23
- package/assets/docs/workflows/skills/index.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/explainer-kit/SKILL.md +87 -25
- package/assets/skills/explainer-kit/briefs/deep-dive.md +35 -0
- package/assets/skills/explainer-kit/briefs/engineer-tour.md +45 -0
- package/assets/skills/explainer-kit/briefs/program-recap.md +41 -0
- package/assets/skills/explainer-kit/briefs/project-explainer.md +38 -0
- package/assets/skills/explainer-kit/briefs/project-page.md +38 -0
- package/assets/skills/explainer-kit/briefs/project-recap.md +47 -0
- package/assets/skills/explainer-kit/briefs/supporting-diagram.md +28 -0
- package/assets/skills/explainer-kit/briefs/walkthrough-deck.md +35 -0
- package/assets/skills/explainer-kit/examples/project-recap/content.md +57 -14
- package/assets/skills/explainer-kit/examples/project-recap/fact-base.json +104 -0
- package/assets/skills/explainer-kit/examples/project-recap/fact-base.md +26 -4
- package/assets/skills/explainer-kit/recipes/engineer-tour.json +27 -10
- package/assets/skills/explainer-kit/recipes/program-recap.json +35 -11
- package/assets/skills/explainer-kit/recipes/project-explainer.json +27 -10
- package/assets/skills/explainer-kit/recipes/project-recap.json +43 -11
- package/assets/skills/explainer-kit/references/contracts.md +45 -19
- package/assets/skills/explainer-kit/schemas/author-request.v2.schema.json +41 -0
- package/assets/skills/explainer-kit/schemas/author-result.v2.schema.json +52 -0
- package/assets/skills/explainer-kit/scripts/lib/browser-runtime.mjs +442 -0
- package/assets/skills/explainer-kit/scripts/lib/content-approval.mjs +223 -10
- package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +28 -43
- package/assets/skills/explainer-kit/scripts/lib/diagram.mjs +237 -0
- package/assets/skills/explainer-kit/scripts/lib/html-safety.mjs +680 -0
- package/assets/skills/explainer-kit/scripts/lib/markdown.mjs +414 -0
- package/assets/skills/explainer-kit/scripts/lib/qa.mjs +309 -10
- package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +313 -41
- package/assets/skills/explainer-kit/scripts/lib/records.mjs +61 -0
- package/assets/skills/explainer-kit/scripts/lib/render.mjs +166 -12
- package/assets/skills/explainer-kit/scripts/render-qa.mjs +147 -2
- package/assets/skills/explainer-kit/scripts/run.mjs +796 -272
- package/assets/skills/explainer-kit/templates/deck-shell.html +25 -5
- package/assets/skills/explainer-kit/templates/diagram-shell.html +29 -7
- package/assets/skills/explainer-kit/templates/engineer-tour.html +133 -9
- package/assets/skills/explainer-kit/templates/house-style.html +82 -0
- package/assets/skills/oat-explainer-kit/SKILL.md +16 -9
- package/assets/skills/oat-explainer-kit/references/author-callback.md +51 -0
- package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +10 -8
- package/assets/skills/oat-explainer-kit/scripts/resolve-intent.mjs +14 -0
- package/assets/skills/oat-explainer-kit/scripts/run.mjs +7 -11
- package/assets/skills/oat-project-complete/SKILL.md +18 -2
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +7 -1
- package/assets/skills/oat-wave-execute/SKILL.md +12 -19
- package/assets/skills/oat-wave-program/SKILL.md +12 -13
- package/assets/skills/subagent-orchestration/SKILL.md +1 -1
- package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +153 -15
- package/assets/skills/subagent-orchestration/references/model-selection-principles.md +75 -3
- package/assets/skills/subagent-orchestration/references/provider-claude.md +95 -35
- package/assets/skills/subagent-orchestration/references/provider-codex.md +36 -10
- package/assets/skills/subagent-orchestration/references/provider-cursor.md +91 -15
- package/dist/providers/cursor/codec/catalog.d.ts +19 -1
- package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
- package/dist/providers/cursor/codec/catalog.js +54 -0
- package/package.json +2 -2
- package/assets/skills/explainer-kit/schemas/author-request.schema.json +0 -85
- package/assets/skills/explainer-kit/schemas/author-result.schema.json +0 -65
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Supporting diagram author brief
|
|
2
|
+
|
|
3
|
+
## Audience
|
|
4
|
+
|
|
5
|
+
Create a visual for a reader who understands the parent explainer but needs one
|
|
6
|
+
boundary, flow, dependency, or state transition made unmistakable.
|
|
7
|
+
|
|
8
|
+
## Voice and visual intent
|
|
9
|
+
|
|
10
|
+
Lead with the visual. Use short labels, consistent terminology, and a clear
|
|
11
|
+
reading direction. Make the title state the question the diagram answers.
|
|
12
|
+
Include a concise legend or annotation only when the visual vocabulary is not
|
|
13
|
+
self-evident.
|
|
14
|
+
|
|
15
|
+
## Floor
|
|
16
|
+
|
|
17
|
+
Compose a complete, accessible HTML diagram from the supplied
|
|
18
|
+
`diagram-shell`. Preserve its required anchors, theme tokens, and core scripts.
|
|
19
|
+
The diagram must have an explicit title, meaningful labels, a visible primary
|
|
20
|
+
flow, and a short text explanation that remains useful to screen-reader users.
|
|
21
|
+
Do not encode essential meaning through color alone.
|
|
22
|
+
|
|
23
|
+
## Expansion license
|
|
24
|
+
|
|
25
|
+
Elaborate the shell's non-script markup and SVG freely when needed for
|
|
26
|
+
legibility. Keep the scope to one coherent question. If the visual needs
|
|
27
|
+
several unrelated panels or long prose to make sense, recommend a deep-dive
|
|
28
|
+
instead.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Walkthrough deck author brief
|
|
2
|
+
|
|
3
|
+
## Audience
|
|
4
|
+
|
|
5
|
+
Build for a live or self-guided walkthrough with teammates who need the project
|
|
6
|
+
story in a deliberate sequence rather than a reference document.
|
|
7
|
+
|
|
8
|
+
## Voice and sequence
|
|
9
|
+
|
|
10
|
+
Use one claim per slide and a clear narrative arc: context, change, system,
|
|
11
|
+
evidence, outcome, next action. Keep text brief enough to scan at presentation
|
|
12
|
+
distance. Use diagrams, comparisons, and evidence excerpts instead of
|
|
13
|
+
shrinking prose to fit.
|
|
14
|
+
|
|
15
|
+
## Floor
|
|
16
|
+
|
|
17
|
+
Compose a complete HTML deck from the supplied `deck-shell`. Preserve required
|
|
18
|
+
anchors, theme tokens, keyboard navigation, progress behavior, print behavior,
|
|
19
|
+
and all core scripts exactly. Include:
|
|
20
|
+
|
|
21
|
+
- an opening frame that states the project and reader promise;
|
|
22
|
+
- a before/after or request/outcome frame;
|
|
23
|
+
- a high-level architecture or execution-flow visual;
|
|
24
|
+
- a decision or trade-off frame;
|
|
25
|
+
- a validation-evidence frame;
|
|
26
|
+
- a closing frame with outcome and next actions.
|
|
27
|
+
|
|
28
|
+
Every slide must have a useful heading, readable contrast, and a sensible
|
|
29
|
+
no-JavaScript and print order.
|
|
30
|
+
|
|
31
|
+
## Shell-composition license
|
|
32
|
+
|
|
33
|
+
The shell supplies safety and presentation mechanics. You may recompose and
|
|
34
|
+
extend non-script markup and styling to fit the story. Do not add scripts,
|
|
35
|
+
external active content, or inline event handlers.
|
|
@@ -2,33 +2,76 @@
|
|
|
2
2
|
|
|
3
3
|
## Original request
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Every correction to the fictional Atlas Index corpus had to wait for the next
|
|
6
|
+
overnight window, and the cost of that window grew with the corpus. The team was
|
|
7
|
+
asked to make indexing continuous without asking a single caller to change how
|
|
8
|
+
they query.
|
|
9
|
+
|
|
10
|
+
> [!IMPORTANT]
|
|
11
|
+
> The query contract was frozen for the whole engagement. Any option that would
|
|
12
|
+
> have reshaped a response was out of scope before it was evaluated.
|
|
7
13
|
|
|
8
14
|
## Key agent decisions
|
|
9
15
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
| Decision | Alternative weighed | Why it won |
|
|
17
|
+
| ---------------------------- | ---------------------------- | -------------------------------------------------- |
|
|
18
|
+
| Checkpoint each partition | A single global checkpoint | Replay after a crash stays inside one partition |
|
|
19
|
+
| Make writes idempotent first | Deduplicate in each consumer | Retry safety belongs to the writer, not the reader |
|
|
20
|
+
| Keep the rebuild as recovery | Delete it after cutover | A proven fallback costs almost nothing to retain |
|
|
21
|
+
|
|
22
|
+
Each row records what was chosen and what it was chosen over, so a later reader
|
|
23
|
+
can reconstruct the reasoning rather than just the result.
|
|
13
24
|
|
|
14
25
|
## As-built architecture
|
|
15
26
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
27
|
+
```diagram
|
|
28
|
+
graph TD
|
|
29
|
+
reader[Change reader] --> queue(Batch queue)
|
|
30
|
+
queue --> worker[Index worker]
|
|
31
|
+
worker --> index[Search index]
|
|
32
|
+
audit{Drift beyond threshold} -->|yes| recovery[Recovery task]
|
|
33
|
+
index --> audit
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The reader resumes from whichever checkpoint its partition last committed, so a
|
|
37
|
+
restart repeats at most one batch. Workers apply batches by key, which makes a
|
|
38
|
+
repeated batch indistinguishable from a first delivery. The audit closes the
|
|
39
|
+
loop by sampling both sides on a schedule and opening a recovery task only when
|
|
40
|
+
the difference clears the accepted threshold.
|
|
19
41
|
|
|
20
42
|
## Implementation record
|
|
21
43
|
|
|
22
|
-
|
|
23
|
-
|
|
44
|
+
```timeline
|
|
45
|
+
2026-02-03 — Checkpoint persistence landed behind a flag
|
|
46
|
+
2026-02-17 — Replay-safe workers replaced the batch writer
|
|
47
|
+
2026-03-02 — Drift audit and the recovery runbook shipped
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- The first milestone changed only bookkeeping, so it could ship dark.
|
|
51
|
+
- The second made retries safe, which is what unlocked automatic recovery.
|
|
52
|
+
- The third added the observability the operators asked for before cutover.
|
|
24
53
|
|
|
25
54
|
## Validation evidence
|
|
26
55
|
|
|
27
|
-
|
|
28
|
-
|
|
56
|
+
| Suite | Scope | Result |
|
|
57
|
+
| ------------------ | ------------------------------------------- | --------- |
|
|
58
|
+
| Contract | Query responses across the fixture corpus | Unchanged |
|
|
59
|
+
| Restart | Interruption at every checkpoint boundary | No gaps |
|
|
60
|
+
| Duplicate delivery | The same batch applied twice | No drift |
|
|
61
|
+
| Parity sampling | Scheduled samples against the source record | In budget |
|
|
62
|
+
|
|
63
|
+
The full logs sit in the fictional
|
|
29
64
|
[evidence index](https://docs.example.com/atlas-index/evidence).
|
|
30
65
|
|
|
66
|
+
> [!NOTE]
|
|
67
|
+
> How long audit samples should be retained is still an open governance
|
|
68
|
+
> question, and it is tracked outside this recap.
|
|
69
|
+
|
|
31
70
|
## Outcome
|
|
32
71
|
|
|
33
|
-
|
|
34
|
-
|
|
72
|
+
Corrections now reach readers in minutes instead of waiting for a nightly
|
|
73
|
+
window, and the operational surface got smaller rather than larger.
|
|
74
|
+
|
|
75
|
+
1. Continuous indexing is the normal path.
|
|
76
|
+
2. The rebuild remains documented, exercised, and unused.
|
|
77
|
+
3. Drift is a monitored quantity rather than an assumption.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "explainer-kit.fact-base/v1",
|
|
3
|
+
"generatedAt": "2026-03-09T18:00:00Z",
|
|
4
|
+
"mode": "supplied",
|
|
5
|
+
"freshnessPolicy": "live-wins",
|
|
6
|
+
"sources": [
|
|
7
|
+
{
|
|
8
|
+
"id": "atlas-index-project",
|
|
9
|
+
"kind": "file",
|
|
10
|
+
"locator": "https://docs.example.com/atlas-index/project-record",
|
|
11
|
+
"hash": "sha256:1f0c4d2b8a6e5937c41d0b7a2e8f36154c9d0ab7e25f8341d6c07b9ae4315f28",
|
|
12
|
+
"observedAt": "2026-03-09T18:00:00Z"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"claims": [
|
|
16
|
+
{
|
|
17
|
+
"id": "F-101",
|
|
18
|
+
"text": "Nightly full rebuilds were replaced by incremental indexing with no change to the public query contract.",
|
|
19
|
+
"status": "confirmed",
|
|
20
|
+
"sections": ["original-request"],
|
|
21
|
+
"citations": [
|
|
22
|
+
{
|
|
23
|
+
"sourceId": "atlas-index-project",
|
|
24
|
+
"locator": "project-record#request"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "F-102",
|
|
30
|
+
"text": "Checkpoints are partition-local, index writes are idempotent, and the full rebuild survives as a recovery path.",
|
|
31
|
+
"status": "confirmed",
|
|
32
|
+
"sections": ["key-agent-decisions"],
|
|
33
|
+
"citations": [
|
|
34
|
+
{
|
|
35
|
+
"sourceId": "atlas-index-project",
|
|
36
|
+
"locator": "project-record#decisions"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "F-103",
|
|
42
|
+
"text": "A checkpointed change reader feeds idempotent workers, and a scheduled audit samples both sides for drift.",
|
|
43
|
+
"status": "confirmed",
|
|
44
|
+
"sections": ["as-built-architecture"],
|
|
45
|
+
"citations": [
|
|
46
|
+
{
|
|
47
|
+
"sourceId": "atlas-index-project",
|
|
48
|
+
"locator": "project-record#as-built"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "F-104",
|
|
54
|
+
"text": "Checkpoint persistence, replay-safe workers, and the drift audit shipped across three sequential milestones.",
|
|
55
|
+
"status": "confirmed",
|
|
56
|
+
"sections": ["implementation-record"],
|
|
57
|
+
"citations": [
|
|
58
|
+
{
|
|
59
|
+
"sourceId": "atlas-index-project",
|
|
60
|
+
"locator": "project-record#milestones"
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "F-105",
|
|
66
|
+
"text": "Contract, interrupted-restart, duplicate-batch, and sampled parity suites all passed before cutover.",
|
|
67
|
+
"status": "confirmed",
|
|
68
|
+
"sections": ["validation-evidence"],
|
|
69
|
+
"citations": [
|
|
70
|
+
{
|
|
71
|
+
"sourceId": "atlas-index-project",
|
|
72
|
+
"locator": "project-record#validation"
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "F-106",
|
|
78
|
+
"text": "Incremental indexing is active and the nightly rebuild is documented as a recovery-only procedure.",
|
|
79
|
+
"status": "confirmed",
|
|
80
|
+
"sections": ["outcome"],
|
|
81
|
+
"citations": [
|
|
82
|
+
{
|
|
83
|
+
"sourceId": "atlas-index-project",
|
|
84
|
+
"locator": "project-record#outcome"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"unresolvedClaims": [
|
|
90
|
+
{
|
|
91
|
+
"id": "F-107",
|
|
92
|
+
"text": "Retention of audit samples beyond ninety days awaits a governance decision.",
|
|
93
|
+
"reason": "needs-confirmation",
|
|
94
|
+
"sections": ["validation-evidence"],
|
|
95
|
+
"citations": [
|
|
96
|
+
{
|
|
97
|
+
"sourceId": "atlas-index-project",
|
|
98
|
+
"locator": "project-record#open-questions"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"overrides": []
|
|
104
|
+
}
|
|
@@ -1,22 +1,44 @@
|
|
|
1
1
|
# Example fact base: Atlas Index recap
|
|
2
2
|
|
|
3
|
-
This fictional fact base demonstrates a completed-project recap.
|
|
3
|
+
This fictional fact base demonstrates a completed-project recap. The prose below
|
|
4
|
+
is the human-readable view; `fact-base.json` beside it is the same evidence in
|
|
5
|
+
the `explainer-kit.fact-base/v1` shape a run actually consumes, with each claim
|
|
6
|
+
tagged to the narrative section it belongs to.
|
|
4
7
|
|
|
5
8
|
## Reconciled claims
|
|
6
9
|
|
|
7
10
|
- **F-101 — Request:** Replace a nightly full rebuild with incremental indexing
|
|
8
11
|
while preserving the existing query contract.
|
|
9
12
|
Source: [approved request](https://docs.example.com/atlas-index/request).
|
|
10
|
-
- **F-102 —
|
|
13
|
+
- **F-102 — Decisions:** Checkpoints are partition-local, writes are idempotent,
|
|
14
|
+
and the full rebuild is retained as a recovery path.
|
|
15
|
+
Source: [decision log](https://docs.example.com/atlas-index/decisions).
|
|
16
|
+
- **F-103 — As built:** A checkpointed change reader feeds idempotent index
|
|
11
17
|
workers; a scheduled audit detects drift.
|
|
12
18
|
Source: [as-built record](https://docs.example.com/atlas-index/as-built).
|
|
13
|
-
- **F-
|
|
19
|
+
- **F-104 — Implementation:** Checkpoint persistence, replay-safe workers, and
|
|
20
|
+
the drift audit shipped across three milestones.
|
|
21
|
+
Source: [milestone record](https://docs.example.com/atlas-index/milestones).
|
|
22
|
+
- **F-105 — Validation:** Contract, restart, duplicate-delivery, and sampled
|
|
23
|
+
parity checks passed.
|
|
14
24
|
Source: [validation evidence](https://docs.example.com/atlas-index/evidence).
|
|
15
|
-
- **F-
|
|
25
|
+
- **F-106 — Outcome:** Incremental indexing is active and the nightly rebuild
|
|
16
26
|
remains available only as a recovery procedure.
|
|
17
27
|
Source: [outcome record](https://docs.example.com/atlas-index/outcome).
|
|
18
28
|
|
|
29
|
+
## Unresolved
|
|
30
|
+
|
|
31
|
+
- **F-107 — Retention:** How long audit samples are kept is still a governance
|
|
32
|
+
question, so the recap reports it as unresolved rather than deciding it.
|
|
33
|
+
|
|
19
34
|
## Reconciliation notes
|
|
20
35
|
|
|
21
36
|
An early plan proposed one shared checkpoint. Implementation evidence records a
|
|
22
37
|
checkpoint per partition, so F-102 treats the implementation as authoritative.
|
|
38
|
+
|
|
39
|
+
## Companion draft
|
|
40
|
+
|
|
41
|
+
`content.md` is the authored floor draft this evidence supports. It is written
|
|
42
|
+
for the v2 authoring model: tables, a fenced `diagram` block, a `timeline`,
|
|
43
|
+
callouts, and lists, all of which the deterministic narrative renderer turns
|
|
44
|
+
into real structured HTML rather than flat paragraphs.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion": "explainer-kit.recipe/
|
|
2
|
+
"schemaVersion": "explainer-kit.recipe/v2",
|
|
3
3
|
"id": "engineer-tour",
|
|
4
4
|
"version": "1",
|
|
5
5
|
"sourceRoles": [
|
|
@@ -11,21 +11,38 @@
|
|
|
11
11
|
"maxBindings": 1
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
|
-
"
|
|
15
|
-
"orientation",
|
|
16
|
-
"architecture",
|
|
17
|
-
"execution-flow",
|
|
18
|
-
"key-code",
|
|
19
|
-
"validation"
|
|
20
|
-
],
|
|
21
|
-
"artifacts": [
|
|
14
|
+
"floor": [
|
|
22
15
|
{
|
|
23
16
|
"id": "engineer-tour",
|
|
24
17
|
"type": "explainer",
|
|
18
|
+
"authoring": "html",
|
|
25
19
|
"template": "engineer-tour",
|
|
26
|
-
"required": true
|
|
20
|
+
"required": true,
|
|
21
|
+
"briefRef": "briefs/engineer-tour.md",
|
|
22
|
+
"requiredNarrative": [
|
|
23
|
+
"orientation",
|
|
24
|
+
"architecture",
|
|
25
|
+
"execution-flow",
|
|
26
|
+
"key-code",
|
|
27
|
+
"validation"
|
|
28
|
+
]
|
|
27
29
|
}
|
|
28
30
|
],
|
|
31
|
+
"expansion": {
|
|
32
|
+
"profiles": [
|
|
33
|
+
{
|
|
34
|
+
"profileId": "supporting-diagram",
|
|
35
|
+
"type": "diagram",
|
|
36
|
+
"authoring": "html",
|
|
37
|
+
"briefRef": "briefs/supporting-diagram.md",
|
|
38
|
+
"shell": "diagram-shell",
|
|
39
|
+
"maxCount": 4
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"limits": {
|
|
43
|
+
"maxArtifacts": 4
|
|
44
|
+
}
|
|
45
|
+
},
|
|
29
46
|
"discoveryLimits": {
|
|
30
47
|
"consecutiveNoNewFindingsRounds": 2,
|
|
31
48
|
"maxRounds": 8
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion": "explainer-kit.recipe/
|
|
2
|
+
"schemaVersion": "explainer-kit.recipe/v2",
|
|
3
3
|
"id": "program-recap",
|
|
4
4
|
"version": "1",
|
|
5
5
|
"sourceRoles": [
|
|
@@ -11,22 +11,46 @@
|
|
|
11
11
|
"maxBindings": 1
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
|
-
"
|
|
15
|
-
"program-overview",
|
|
16
|
-
"wave-map",
|
|
17
|
-
"per-wave-outcomes",
|
|
18
|
-
"convention-evolution",
|
|
19
|
-
"aggregate-numbers",
|
|
20
|
-
"follow-up-ledger"
|
|
21
|
-
],
|
|
22
|
-
"artifacts": [
|
|
14
|
+
"floor": [
|
|
23
15
|
{
|
|
24
16
|
"id": "program-recap",
|
|
25
17
|
"type": "hub",
|
|
18
|
+
"authoring": "markdown",
|
|
26
19
|
"template": "house-style",
|
|
27
|
-
"required": true
|
|
20
|
+
"required": true,
|
|
21
|
+
"briefRef": "briefs/program-recap.md",
|
|
22
|
+
"requiredNarrative": [
|
|
23
|
+
"program-overview",
|
|
24
|
+
"wave-map",
|
|
25
|
+
"per-wave-outcomes",
|
|
26
|
+
"convention-evolution",
|
|
27
|
+
"aggregate-numbers",
|
|
28
|
+
"follow-up-ledger"
|
|
29
|
+
]
|
|
28
30
|
}
|
|
29
31
|
],
|
|
32
|
+
"expansion": {
|
|
33
|
+
"profiles": [
|
|
34
|
+
{
|
|
35
|
+
"profileId": "supporting-diagram",
|
|
36
|
+
"type": "diagram",
|
|
37
|
+
"authoring": "html",
|
|
38
|
+
"briefRef": "briefs/supporting-diagram.md",
|
|
39
|
+
"shell": "diagram-shell",
|
|
40
|
+
"maxCount": 3
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"profileId": "project-page",
|
|
44
|
+
"type": "explainer",
|
|
45
|
+
"authoring": "markdown",
|
|
46
|
+
"briefRef": "briefs/project-page.md",
|
|
47
|
+
"maxCount": 12
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"limits": {
|
|
51
|
+
"maxArtifacts": 12
|
|
52
|
+
}
|
|
53
|
+
},
|
|
30
54
|
"discoveryLimits": {
|
|
31
55
|
"consecutiveNoNewFindingsRounds": 2,
|
|
32
56
|
"maxRounds": 8
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion": "explainer-kit.recipe/
|
|
2
|
+
"schemaVersion": "explainer-kit.recipe/v2",
|
|
3
3
|
"id": "project-explainer",
|
|
4
4
|
"version": "1",
|
|
5
5
|
"sourceRoles": [
|
|
@@ -11,21 +11,38 @@
|
|
|
11
11
|
"maxBindings": 1
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
|
-
"
|
|
15
|
-
"planned-architecture",
|
|
16
|
-
"decisions",
|
|
17
|
-
"risks",
|
|
18
|
-
"phases",
|
|
19
|
-
"validation-approach"
|
|
20
|
-
],
|
|
21
|
-
"artifacts": [
|
|
14
|
+
"floor": [
|
|
22
15
|
{
|
|
23
16
|
"id": "project-explainer",
|
|
24
17
|
"type": "hub",
|
|
18
|
+
"authoring": "markdown",
|
|
25
19
|
"template": "house-style",
|
|
26
|
-
"required": true
|
|
20
|
+
"required": true,
|
|
21
|
+
"briefRef": "briefs/project-explainer.md",
|
|
22
|
+
"requiredNarrative": [
|
|
23
|
+
"planned-architecture",
|
|
24
|
+
"decisions",
|
|
25
|
+
"risks",
|
|
26
|
+
"phases",
|
|
27
|
+
"validation-approach"
|
|
28
|
+
]
|
|
27
29
|
}
|
|
28
30
|
],
|
|
31
|
+
"expansion": {
|
|
32
|
+
"profiles": [
|
|
33
|
+
{
|
|
34
|
+
"profileId": "supporting-diagram",
|
|
35
|
+
"type": "diagram",
|
|
36
|
+
"authoring": "html",
|
|
37
|
+
"briefRef": "briefs/supporting-diagram.md",
|
|
38
|
+
"shell": "diagram-shell",
|
|
39
|
+
"maxCount": 4
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"limits": {
|
|
43
|
+
"maxArtifacts": 4
|
|
44
|
+
}
|
|
45
|
+
},
|
|
29
46
|
"discoveryLimits": {
|
|
30
47
|
"consecutiveNoNewFindingsRounds": 2,
|
|
31
48
|
"maxRounds": 8
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion": "explainer-kit.recipe/
|
|
2
|
+
"schemaVersion": "explainer-kit.recipe/v2",
|
|
3
3
|
"id": "project-recap",
|
|
4
4
|
"version": "1",
|
|
5
5
|
"sourceRoles": [
|
|
@@ -11,22 +11,54 @@
|
|
|
11
11
|
"maxBindings": 1
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
|
-
"
|
|
15
|
-
"original-request",
|
|
16
|
-
"key-agent-decisions",
|
|
17
|
-
"as-built-architecture",
|
|
18
|
-
"implementation-record",
|
|
19
|
-
"validation-evidence",
|
|
20
|
-
"outcome"
|
|
21
|
-
],
|
|
22
|
-
"artifacts": [
|
|
14
|
+
"floor": [
|
|
23
15
|
{
|
|
24
16
|
"id": "project-recap",
|
|
25
17
|
"type": "hub",
|
|
18
|
+
"authoring": "markdown",
|
|
26
19
|
"template": "house-style",
|
|
27
|
-
"required": true
|
|
20
|
+
"required": true,
|
|
21
|
+
"briefRef": "briefs/project-recap.md",
|
|
22
|
+
"requiredNarrative": [
|
|
23
|
+
"original-request",
|
|
24
|
+
"key-agent-decisions",
|
|
25
|
+
"as-built-architecture",
|
|
26
|
+
"implementation-record",
|
|
27
|
+
"validation-evidence",
|
|
28
|
+
"outcome"
|
|
29
|
+
]
|
|
28
30
|
}
|
|
29
31
|
],
|
|
32
|
+
"expansion": {
|
|
33
|
+
"profiles": [
|
|
34
|
+
{
|
|
35
|
+
"profileId": "supporting-diagram",
|
|
36
|
+
"type": "diagram",
|
|
37
|
+
"authoring": "html",
|
|
38
|
+
"briefRef": "briefs/supporting-diagram.md",
|
|
39
|
+
"shell": "diagram-shell",
|
|
40
|
+
"maxCount": 4
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"profileId": "deep-dive",
|
|
44
|
+
"type": "explainer",
|
|
45
|
+
"authoring": "markdown",
|
|
46
|
+
"briefRef": "briefs/deep-dive.md",
|
|
47
|
+
"maxCount": 3
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"profileId": "walkthrough-deck",
|
|
51
|
+
"type": "deck",
|
|
52
|
+
"authoring": "html",
|
|
53
|
+
"briefRef": "briefs/walkthrough-deck.md",
|
|
54
|
+
"shell": "deck-shell",
|
|
55
|
+
"maxCount": 1
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"limits": {
|
|
59
|
+
"maxArtifacts": 6
|
|
60
|
+
}
|
|
61
|
+
},
|
|
30
62
|
"discoveryLimits": {
|
|
31
63
|
"consecutiveNoNewFindingsRounds": 2,
|
|
32
64
|
"maxRounds": 8
|
|
@@ -30,13 +30,25 @@ claims, sources, overrides, and the freshness policy. It returns:
|
|
|
30
30
|
No provider name, command, credential, or dispatch protocol is part of this
|
|
31
31
|
contract.
|
|
32
32
|
|
|
33
|
-
Every unattended
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
Every run, interactive or unattended, also requires a provider-neutral author
|
|
34
|
+
callback; a run without one fails `E_AUTHOR_REQUIRED`. An in-process caller
|
|
35
|
+
supplies `options.author(request)`; a JSON-only CLI caller uses
|
|
36
|
+
`--author-module author.mjs`. The core invokes it once per resolved artifact
|
|
37
|
+
with an `explainer-kit.author-request/v2` payload containing the artifact
|
|
38
|
+
identity and type, the artifact's authoring path, the inlined brief, the
|
|
39
|
+
reconciled fact base, the resolved theme, the shell source for artistic
|
|
40
|
+
artifacts, the required narrative sections for narrative floor artifacts, and
|
|
41
|
+
bounded-discovery context. It must return an `explainer-kit.author-result/v2`
|
|
42
|
+
carrying exactly one of `content.markdown` or `content.html`, matching the
|
|
43
|
+
artifact's declared authoring path, plus non-secret provenance. A floor result
|
|
44
|
+
may also carry `proposedArtifacts` of `{id, profileId, rationale}`; the
|
|
45
|
+
referenced expansion profile supplies the type, authoring path, brief, and
|
|
46
|
+
shell. The executable callback is never persisted in `run-request.json`.
|
|
47
|
+
|
|
48
|
+
Unknown profile IDs and unsafe, duplicate, or floor-colliding artifact IDs are
|
|
49
|
+
hard errors. Proposals beyond a profile's `maxCount` or the recipe's
|
|
50
|
+
`expansion.limits.maxArtifacts` are rejected with a warning and the run
|
|
51
|
+
continues.
|
|
40
52
|
|
|
41
53
|
## Explicit source forms
|
|
42
54
|
|
|
@@ -57,7 +69,8 @@ provenance. The executable callback is never persisted in `run-request.json`.
|
|
|
57
69
|
An unattended request asserts that its explicit source artifacts are already
|
|
58
70
|
approved. It does not prompt, and it fails before narrative serialization when
|
|
59
71
|
the author is absent, returns an invalid result, or copies excessive verbatim
|
|
60
|
-
source text.
|
|
72
|
+
source text. It auto-approves with `auto-drafted` marking once the artifacts are
|
|
73
|
+
built and checked.
|
|
61
74
|
|
|
62
75
|
## Pipeline and retained package
|
|
63
76
|
|
|
@@ -65,19 +78,30 @@ The core executes:
|
|
|
65
78
|
|
|
66
79
|
1. validate request and recipe
|
|
67
80
|
2. reconcile or check the fact base
|
|
68
|
-
3. apply bounded discovery
|
|
81
|
+
3. apply bounded discovery
|
|
69
82
|
4. resolve one theme
|
|
70
|
-
5.
|
|
71
|
-
|
|
72
|
-
|
|
83
|
+
5. author each floor artifact against its brief, evaluate expansion proposals,
|
|
84
|
+
and author each accepted expansion artifact
|
|
85
|
+
6. render typed artifacts through the narrative renderer or validate
|
|
86
|
+
agent-composed HTML, per each artifact's declared authoring path
|
|
87
|
+
7. run structural, guideline, and optional browser QA
|
|
88
|
+
8. resolve content approval — the interactive gate pauses here, after render and
|
|
89
|
+
QA and before anything is published or persisted externally
|
|
90
|
+
9. write the manifest and build record
|
|
73
91
|
|
|
74
92
|
The run package retains the privacy-safe `run-request.json`,
|
|
75
93
|
`source/content-approval.json`, `source/fact-base.json`,
|
|
76
|
-
`source/fact-base.md`, `source/content/*.md
|
|
77
|
-
`source/
|
|
78
|
-
`
|
|
79
|
-
|
|
80
|
-
|
|
94
|
+
`source/fact-base.md`, authored content under `source/content/*.md` and
|
|
95
|
+
`source/content/*.html`, structured `source/author/*.json` results,
|
|
96
|
+
`theme.resolved.json`, rendered `site/` files, `manifest.json`, and
|
|
97
|
+
`build-record.json` as far as each stage succeeds. A stage failure records a
|
|
98
|
+
structured error and recovery action without deleting earlier outputs. Raw art
|
|
99
|
+
direction is omitted unless the request explicitly opts in.
|
|
100
|
+
|
|
101
|
+
Build-record stages are terminal once `passed` or `warned`. A rejected run that
|
|
102
|
+
is later approved reopens the render and QA stages through a narrowly guarded
|
|
103
|
+
record-level reset so the corrected sources are re-rendered and re-validated,
|
|
104
|
+
leaving an auditable trail rather than approving stale artifacts.
|
|
81
105
|
|
|
82
106
|
When a caller supplies `discover({ round, recipe, factBase })`, the callback
|
|
83
107
|
returns the findings added in that round. The core stops after two consecutive
|
|
@@ -93,7 +117,7 @@ Durability and publishing are never implicit.
|
|
|
93
117
|
`record-durability.mjs`; the core never creates commits. The first evidence
|
|
94
118
|
commit must contain every path and byte hash in `manifest.immutableHashes`:
|
|
95
119
|
the privacy-safe request, content approval, fact-base JSON and Markdown,
|
|
96
|
-
declared author results, all content
|
|
120
|
+
declared author results, all authored content, the resolved theme, and every
|
|
97
121
|
built artifact retained in the package. Mutable `manifest.json` and
|
|
98
122
|
`build-record.json` remain excluded for the separate evidence update.
|
|
99
123
|
Schema-v1 manifests created before complete-package coverage are rejected
|
|
@@ -110,7 +134,9 @@ verified. Publishing remains independently human-gated by the caller.
|
|
|
110
134
|
## Result
|
|
111
135
|
|
|
112
136
|
`runExplainer` returns the run root, manifest path, build-record path, outcome,
|
|
113
|
-
warnings, and bounded-discovery summary.
|
|
137
|
+
warnings, approval status and marking, and bounded-discovery summary. The
|
|
138
|
+
marking rides in the result and the approval record only; `manifest/v1` stays
|
|
139
|
+
frozen and carries no marking field. Input validation and unsupported
|
|
114
140
|
recipes reject before output mutation. Failures after initialization return a
|
|
115
141
|
`failed` result with paths to the retained record and intermediates.
|
|
116
142
|
|