@open-agent-toolkit/cli 0.2.73 → 0.2.74
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/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/configuration.md +3 -56
- package/assets/docs/cli-utilities/tool-packs.md +4 -4
- package/assets/docs/contributing/code.md +2 -2
- package/assets/docs/contributing/index.md +0 -1
- package/assets/docs/reference/cli-reference.md +1 -1
- package/assets/docs/reference/troubleshooting.md +17 -40
- package/assets/docs/workflows/projects/artifacts.md +16 -34
- package/assets/docs/workflows/projects/lifecycle.md +20 -19
- package/assets/docs/workflows/skills/explainer-kit.md +180 -440
- package/assets/docs/workflows/skills/index.md +1 -2
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/explainer-kit/SKILL.md +96 -171
- package/assets/skills/explainer-kit/recipes/engineer-tour.json +1 -22
- package/assets/skills/explainer-kit/recipes/program-recap.json +1 -29
- package/assets/skills/explainer-kit/recipes/project-explainer.json +1 -22
- package/assets/skills/explainer-kit/recipes/project-recap.v2.json +1 -43
- package/assets/skills/explainer-kit/references/fact-base-contract.md +76 -101
- package/assets/skills/explainer-kit/references/recap-authoring.md +99 -0
- package/assets/skills/explainer-kit/schemas/manifest.schema.json +13 -135
- package/assets/skills/explainer-kit/scripts/bundle.mjs +712 -0
- package/assets/skills/explainer-kit/scripts/lib/claim-subject.mjs +40 -0
- package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +113 -1504
- package/assets/skills/explainer-kit/scripts/lib/failure.mjs +13 -0
- package/assets/skills/explainer-kit/scripts/lib/package-coverage.mjs +57 -403
- package/assets/skills/explainer-kit/scripts/lib/qa-result.mjs +168 -0
- package/assets/skills/explainer-kit/scripts/lib/qa.mjs +90 -488
- package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +28 -545
- package/assets/skills/explainer-kit/scripts/lib/run-package.mjs +120 -0
- package/assets/skills/explainer-kit/scripts/lib/sanitize.mjs +42 -0
- package/assets/skills/explainer-kit/scripts/record.mjs +335 -0
- package/assets/skills/explainer-kit/scripts/verify.mjs +648 -0
- package/assets/skills/oat-explainer-kit/SKILL.md +57 -117
- package/assets/skills/oat-explainer-kit/references/config-contract.md +20 -64
- package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +85 -237
- package/assets/skills/oat-explainer-kit/scripts/bind-project-sources.mjs +18 -10
- package/assets/skills/oat-explainer-kit/scripts/check-core.mjs +1 -0
- package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +256 -21
- package/assets/skills/oat-explainer-kit/scripts/persist-intent.mjs +82 -3
- package/assets/skills/oat-explainer-kit/scripts/resolve-config.mjs +0 -162
- package/assets/skills/oat-explainer-kit/scripts/resolve-intent.mjs +57 -123
- package/assets/skills/oat-project-autonomous/SKILL.md +14 -13
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +165 -165
- package/assets/skills/oat-project-complete/SKILL.md +168 -349
- package/assets/skills/oat-project-complete/scripts/consume-persisted-recap-intent.mjs +125 -0
- package/assets/skills/oat-project-complete/scripts/execute-synced-archive-entry.mjs +0 -30
- package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +4 -37
- package/assets/skills/oat-project-complete/scripts/parse-synced-archive-resume-fields.mjs +17 -16
- package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +9 -174
- package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +1 -2
- package/assets/skills/oat-project-document/SKILL.md +1 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +165 -165
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +44 -56
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +165 -165
- package/assets/skills/oat-project-lite/SKILL.md +1 -1
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +165 -165
- package/assets/skills/oat-project-plan/SKILL.md +5 -6
- package/assets/skills/oat-project-pr-final/SKILL.md +1 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +165 -165
- package/assets/skills/oat-project-quick-start/SKILL.md +1 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +165 -165
- package/assets/skills/oat-project-summary/SKILL.md +35 -25
- package/assets/skills/oat-wave-execute/SKILL.md +11 -36
- package/assets/skills/oat-wave-program/SKILL.md +13 -37
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +9 -113
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +32 -184
- package/dist/commands/project/archive/explainer-package-coverage.d.ts +3 -8
- package/dist/commands/project/archive/explainer-package-coverage.d.ts.map +1 -1
- package/dist/commands/project/archive/explainer-package-coverage.js +1 -1
- package/dist/config/oat-config.d.ts +0 -11
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +0 -34
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +0 -8
- package/dist/release/public-package-contract.d.ts.map +1 -1
- package/dist/release/public-package-contract.js +2 -10
- package/dist/validation/project-state.d.ts.map +1 -1
- package/dist/validation/project-state.js +42 -3
- package/package.json +2 -2
- package/assets/docs/contributing/explainer-kit-verification.md +0 -133
- package/assets/docs/workflows/skills/explainer-kit-providers.md +0 -155
- package/assets/skills/explainer-kit/briefs/deep-dive.md +0 -35
- package/assets/skills/explainer-kit/briefs/project-page.md +0 -38
- package/assets/skills/explainer-kit/briefs/supporting-diagram.md +0 -28
- package/assets/skills/explainer-kit/briefs/walkthrough-deck.md +0 -35
- package/assets/skills/explainer-kit/examples/project-explainer/content.md +0 -31
- package/assets/skills/explainer-kit/examples/project-explainer/fact-base.md +0 -22
- package/assets/skills/explainer-kit/examples/project-recap/content.md +0 -77
- package/assets/skills/explainer-kit/examples/project-recap/fact-base.json +0 -104
- package/assets/skills/explainer-kit/examples/project-recap/fact-base.md +0 -44
- package/assets/skills/explainer-kit/examples/theme-bundle.json +0 -87
- package/assets/skills/explainer-kit/recipes/project-recap.v1.json +0 -93
- package/assets/skills/explainer-kit/references/contracts.md +0 -324
- package/assets/skills/explainer-kit/references/destination-contract.md +0 -210
- package/assets/skills/explainer-kit/references/extension-contract.md +0 -80
- package/assets/skills/explainer-kit/references/golden-conformance.md +0 -80
- package/assets/skills/explainer-kit/references/visual-review.md +0 -71
- package/assets/skills/explainer-kit/schemas/author-request.v2.schema.json +0 -212
- package/assets/skills/explainer-kit/schemas/author-request.v3.schema.json +0 -241
- package/assets/skills/explainer-kit/schemas/author-result.v2.schema.json +0 -52
- package/assets/skills/explainer-kit/schemas/build-record.schema.json +0 -98
- package/assets/skills/explainer-kit/schemas/durability-evidence.schema.json +0 -53
- package/assets/skills/explainer-kit/schemas/publish-receipt.v1.schema.json +0 -97
- package/assets/skills/explainer-kit/schemas/publish-receipt.v2.schema.json +0 -215
- package/assets/skills/explainer-kit/schemas/publish-request.v1.schema.json +0 -32
- package/assets/skills/explainer-kit/schemas/publish-request.v2.schema.json +0 -34
- package/assets/skills/explainer-kit/schemas/run-request.schema.json +0 -147
- package/assets/skills/explainer-kit/schemas/set-plan.v1.schema.json +0 -149
- package/assets/skills/explainer-kit/schemas/terminal-evidence.v1.schema.json +0 -81
- package/assets/skills/explainer-kit/schemas/visual-review-evidence.v1.schema.json +0 -66
- package/assets/skills/explainer-kit/schemas/visual-review-request.v1.schema.json +0 -117
- package/assets/skills/explainer-kit/schemas/visual-review-result.v1.schema.json +0 -80
- package/assets/skills/explainer-kit/scripts/lib/catalog.mjs +0 -349
- package/assets/skills/explainer-kit/scripts/lib/content-approval.mjs +0 -418
- package/assets/skills/explainer-kit/scripts/lib/diagram.mjs +0 -514
- package/assets/skills/explainer-kit/scripts/lib/durability.mjs +0 -643
- package/assets/skills/explainer-kit/scripts/lib/fact-base.mjs +0 -664
- package/assets/skills/explainer-kit/scripts/lib/internal-references.mjs +0 -538
- package/assets/skills/explainer-kit/scripts/lib/markdown.mjs +0 -414
- package/assets/skills/explainer-kit/scripts/lib/publication-policy.mjs +0 -54
- package/assets/skills/explainer-kit/scripts/lib/records.mjs +0 -954
- package/assets/skills/explainer-kit/scripts/lib/render.mjs +0 -703
- package/assets/skills/explainer-kit/scripts/lib/s3-roots.mjs +0 -353
- package/assets/skills/explainer-kit/scripts/lib/s3-static.mjs +0 -759
- package/assets/skills/explainer-kit/scripts/lib/set-plan.mjs +0 -209
- package/assets/skills/explainer-kit/scripts/lib/source-backlinks.mjs +0 -218
- package/assets/skills/explainer-kit/scripts/lib/terminal-evidence.mjs +0 -157
- package/assets/skills/explainer-kit/scripts/lib/visual-review.mjs +0 -400
- package/assets/skills/explainer-kit/scripts/publish.mjs +0 -76
- package/assets/skills/explainer-kit/scripts/record-durability.mjs +0 -64
- package/assets/skills/explainer-kit/scripts/render-qa.mjs +0 -461
- package/assets/skills/explainer-kit/scripts/run.mjs +0 -3038
- package/assets/skills/explainer-kit/scripts/validate.mjs +0 -59
- package/assets/skills/oat-explainer-kit/references/author-callback.md +0 -53
- package/assets/skills/oat-explainer-kit/references/migration.md +0 -144
- package/assets/skills/oat-explainer-kit/references/visual-review-callback.md +0 -83
- package/assets/skills/oat-explainer-kit/scripts/derive-destination.mjs +0 -91
- package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +0 -531
- package/assets/skills/oat-explainer-kit/scripts/probe-recap-seams.mjs +0 -371
- package/assets/skills/oat-explainer-kit/scripts/run.mjs +0 -905
- package/dist/commands/project/archive/explainer-source-backlinks.d.ts +0 -18
- package/dist/commands/project/archive/explainer-source-backlinks.d.ts.map +0 -1
- package/dist/commands/project/archive/explainer-source-backlinks.js +0 -27
- package/dist/commands/project/archive/explainer-terminal-evidence.d.ts +0 -29
- package/dist/commands/project/archive/explainer-terminal-evidence.d.ts.map +0 -1
- package/dist/commands/project/archive/explainer-terminal-evidence.js +0 -37
|
@@ -1,124 +1,99 @@
|
|
|
1
|
-
# Fact-base
|
|
1
|
+
# Fact-base contract
|
|
2
2
|
|
|
3
|
-
`
|
|
4
|
-
`
|
|
5
|
-
|
|
3
|
+
`bundle.mjs` writes the authoring inputs under `<run-root>/source/`. The
|
|
4
|
+
machine contract is `fact-base.json`; `fact-base.md` is its readable rendering;
|
|
5
|
+
`ledger.json` is the bounded verification index.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Fact-base record
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
`source/fact-base.json` is an `explainer-kit.fact-base/v1` object with exactly
|
|
10
|
+
these eight required keys:
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
| Key | Flow value or meaning |
|
|
13
|
+
| ------------------ | ---------------------------------------------------------------------------- |
|
|
14
|
+
| `schemaVersion` | `explainer-kit.fact-base/v1` |
|
|
15
|
+
| `generatedAt` | ISO date-time for this bundle |
|
|
16
|
+
| `mode` | `supplied`; the agent-authored flow assembles the fact base before authoring |
|
|
17
|
+
| `freshnessPolicy` | `live-wins` |
|
|
18
|
+
| `sources` | Hash-bound allowlisted input files |
|
|
19
|
+
| `claims` | Confirmed source-backed claims |
|
|
20
|
+
| `unresolvedClaims` | Inputs or claims that cannot be stated as confirmed |
|
|
21
|
+
| `overrides` | Explicit claim decisions; normally empty |
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
`
|
|
23
|
+
The record is canonical JSON and must pass
|
|
24
|
+
`validateContract('fact-base', value)` before authoring starts. It carries no
|
|
25
|
+
claims index or browser evidence.
|
|
21
26
|
|
|
22
|
-
##
|
|
27
|
+
## Sources and citations
|
|
23
28
|
|
|
24
|
-
|
|
29
|
+
Each selected input is represented by a source:
|
|
25
30
|
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"id": "source-1",
|
|
34
|
+
"kind": "file",
|
|
35
|
+
"locator": "plan.md",
|
|
36
|
+
"hash": "sha256:…"
|
|
37
|
+
}
|
|
32
38
|
```
|
|
33
39
|
|
|
34
|
-
The
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
available source `observedAt` with the freshness window. Staleness produces a
|
|
38
|
-
warning; structural or citation inconsistency rejects the input.
|
|
39
|
-
|
|
40
|
-
Supplied mode never invokes the adversarial critic. Its `critic` result is
|
|
41
|
-
`{ invoked: false, reason: 'supplied-mode-lightweight-check-only' }`.
|
|
40
|
+
The flow may add the `role: "bundle-input"` marker used when the manifest
|
|
41
|
+
copies input hashes. Every claim citation has exactly the source identity and
|
|
42
|
+
the source-relative location:
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
```json
|
|
45
|
+
{ "sourceId": "source-1", "locator": "plan.md:40-44" }
|
|
46
|
+
```
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
Do not add `path`, `lineRange`, repository, or URL backlink fields to
|
|
49
|
+
agent-authored-flow citations. Every citation must name a declared source.
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
{
|
|
49
|
-
mode: 'federated',
|
|
50
|
-
freshnessPolicy: 'live-wins',
|
|
51
|
-
sourceDocuments: [{
|
|
52
|
-
source: {
|
|
53
|
-
id,
|
|
54
|
-
kind,
|
|
55
|
-
locator,
|
|
56
|
-
revision,
|
|
57
|
-
hash,
|
|
58
|
-
observedAt,
|
|
59
|
-
authoritativeFor,
|
|
60
|
-
},
|
|
61
|
-
claims: [{ id, text, locator, sections }],
|
|
62
|
-
}],
|
|
63
|
-
overrides: [{ claimId, decision, confirmedAt }],
|
|
64
|
-
}
|
|
65
|
-
```
|
|
51
|
+
## Claims
|
|
66
52
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
For conflicting text under one claim ID, an `authoritativeFor` declaration
|
|
73
|
-
wins first. Otherwise the newest `observedAt` wins. A tie remains
|
|
74
|
-
`contradictory`. Operator overrides take final precedence, produce an
|
|
75
|
-
`overridden` claim, remain explicit in `overrides`, and suppress critic
|
|
76
|
-
findings for that claim.
|
|
77
|
-
|
|
78
|
-
Federated processing requires `options.critic`, an asynchronous,
|
|
79
|
-
provider-neutral callback. The callback receives only data:
|
|
80
|
-
|
|
81
|
-
```js
|
|
82
|
-
async function critic({ freshnessPolicy, sources, claims, overrides }) {
|
|
83
|
-
return {
|
|
84
|
-
criticId: 'stable-callback-id',
|
|
85
|
-
executedAt: new Date().toISOString(),
|
|
86
|
-
findings: [
|
|
87
|
-
{
|
|
88
|
-
claimId: 'status',
|
|
89
|
-
classification: 'contradictory',
|
|
90
|
-
text: 'The status sources disagree.',
|
|
91
|
-
sourceIds: ['snapshot', 'live'],
|
|
92
|
-
},
|
|
93
|
-
],
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
```
|
|
53
|
+
Confirmed claims have `{ id, text, status: "confirmed", citations }`.
|
|
54
|
+
Unresolved claims retain their text and citations with one schema-defined
|
|
55
|
+
reason: `contradictory`, `stale`, `missing-evidence`, or
|
|
56
|
+
`needs-confirmation`. Inputs that cannot be parsed are represented here rather
|
|
57
|
+
than silently omitted.
|
|
97
58
|
|
|
98
|
-
The
|
|
99
|
-
|
|
100
|
-
and integrates its returned data.
|
|
59
|
+
The author may summarize confirmed claims but must not invent a connective
|
|
60
|
+
fact. An unresolved claim remains visibly uncertain in the artifact.
|
|
101
61
|
|
|
102
|
-
##
|
|
62
|
+
## Anchor ledger
|
|
103
63
|
|
|
104
|
-
|
|
64
|
+
`source/ledger.json` is derived from the same claims and has four keys:
|
|
105
65
|
|
|
106
|
-
```
|
|
66
|
+
```json
|
|
107
67
|
{
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
68
|
+
"terminology": [{ "term": "agent-authored-recap" }],
|
|
69
|
+
"numbers": [{ "subject": "p02", "value": "4" }],
|
|
70
|
+
"statuses": [{ "subject": "p02", "value": "in_progress" }],
|
|
71
|
+
"claims": [
|
|
72
|
+
{
|
|
73
|
+
"subject": "p02",
|
|
74
|
+
"value": "4",
|
|
75
|
+
"kind": "number",
|
|
76
|
+
"claimId": "claim-1"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
113
79
|
}
|
|
114
80
|
```
|
|
115
81
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
82
|
+
`terminology`, `numbers`, and `statuses` are the bounded anchor groups used by
|
|
83
|
+
the ledger-to-page cohesion check. Each group contains at most 12 entries; an
|
|
84
|
+
individual group may be empty, but all three may not be empty together.
|
|
85
|
+
|
|
86
|
+
`claims` is the page-to-ledger index for numeric, date, and closed-vocabulary
|
|
87
|
+
status tokens. Its subject comes from the source table row, sentence
|
|
88
|
+
identifier, or heading. The authored page keeps each token with that subject
|
|
89
|
+
so `verify.mjs` can match the exact `(subject, value, kind)` tuple.
|
|
90
|
+
|
|
91
|
+
## Consumers
|
|
121
92
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
93
|
+
- The host agent reads `fact-base.json`, `fact-base.md`, and `ledger.json`
|
|
94
|
+
while authoring.
|
|
95
|
+
- `verify.mjs` checks ledger anchors against the page and machine-readable page
|
|
96
|
+
claims against `ledger.claims`.
|
|
97
|
+
- `record.mjs` carries the fact-base hash and source input hashes into
|
|
98
|
+
`manifest.json`.
|
|
99
|
+
- A human uses source locators and claim IDs to diagnose verification findings.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Agent-authored recap mechanics
|
|
2
|
+
|
|
3
|
+
Use this reference with the recipe's bundled author brief. The brief defines
|
|
4
|
+
the audience, voice, and narrative intent; this reference defines how to turn a
|
|
5
|
+
prepared run into one verifiable HTML artifact.
|
|
6
|
+
|
|
7
|
+
## Read the run inputs
|
|
8
|
+
|
|
9
|
+
Read these files before authoring:
|
|
10
|
+
|
|
11
|
+
- `source/fact-base.json` for confirmed and unresolved claims and their source
|
|
12
|
+
locators;
|
|
13
|
+
- `source/fact-base.md` for a readable rendering of the same fact base;
|
|
14
|
+
- `source/ledger.json` for the bounded terminology, number, date, and status
|
|
15
|
+
anchors verification expects;
|
|
16
|
+
- `theme.resolved.json` for the resolved palette and typography; and
|
|
17
|
+
- the selected recipe's `floor[0]`, including `template`,
|
|
18
|
+
`requiredNarrative`, and `briefRef`.
|
|
19
|
+
|
|
20
|
+
Read the bundled file named by `briefRef` verbatim. Do not replace its
|
|
21
|
+
audience or editorial instructions with generic recap prose.
|
|
22
|
+
|
|
23
|
+
## Preserve recipe anchors
|
|
24
|
+
|
|
25
|
+
Write each `requiredNarrative` value as a non-empty `<section id="…">`:
|
|
26
|
+
|
|
27
|
+
| Recipe | Required section IDs |
|
|
28
|
+
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
29
|
+
| `project-recap` | `original-request`, `key-agent-decisions`, `as-built-architecture`, `implementation-record`, `validation-evidence`, `outcome` |
|
|
30
|
+
| `program-recap` | `program-overview`, `wave-map`, `per-wave-outcomes`, `convention-evolution`, `aggregate-numbers`, `follow-up-ledger` |
|
|
31
|
+
| `project-explainer` | `planned-architecture`, `decisions`, `risks`, `phases`, `validation-approach` |
|
|
32
|
+
| `engineer-tour` | `orientation`, `architecture`, `execution-flow`, `key-code`, `validation` |
|
|
33
|
+
|
|
34
|
+
Navigation should link to these IDs with descriptive labels. Keep every
|
|
35
|
+
section useful without JavaScript.
|
|
36
|
+
|
|
37
|
+
## Build from the recipe shell
|
|
38
|
+
|
|
39
|
+
Copy `templates/<floor[0].template>.html` to `site/index.html`, then replace its
|
|
40
|
+
tokens:
|
|
41
|
+
|
|
42
|
+
- `THEME_CSS`: CSS derived from `theme.resolved.json`;
|
|
43
|
+
- `TITLE`, `DESCRIPTION`, and `EYEBROW`: concise framing grounded in the fact
|
|
44
|
+
base;
|
|
45
|
+
- `NAVIGATION`: links to every required section;
|
|
46
|
+
- `CONTENT`: the authored sections and their source-grounded visuals; and
|
|
47
|
+
- `FOOTER`: provenance or reading guidance that does not dump source text.
|
|
48
|
+
|
|
49
|
+
The `engineer-tour` shell also has a `DIAGRAM` token. Fill it only with
|
|
50
|
+
source-grounded inline SVG markup. Preserve every bundled script byte-for-byte;
|
|
51
|
+
do not add scripts or event-handler attributes.
|
|
52
|
+
|
|
53
|
+
## Keep the artifact self-contained
|
|
54
|
+
|
|
55
|
+
Produce one `site/index.html` with inline CSS and inline, shell-approved
|
|
56
|
+
scripts only. Do not load fonts, images, styles, scripts, or other resources
|
|
57
|
+
from external URLs. Do not paste source documents or the fact base into the
|
|
58
|
+
page. Summarize and structure the evidence for the reader.
|
|
59
|
+
|
|
60
|
+
## Trace every machine-checkable claim
|
|
61
|
+
|
|
62
|
+
Spell terms, identifiers, numbers, dates, and closed-vocabulary statuses
|
|
63
|
+
exactly as the fact base spells them. Keep each number, date, or status in the
|
|
64
|
+
same sentence, list item, or table row as its subject so verification can match
|
|
65
|
+
the `(subject, value)` pair in `source/ledger.json`.
|
|
66
|
+
For cards, definition lists, and other non-paragraph elements, verification
|
|
67
|
+
uses the nearest bold or definition label or preceding heading as the subject,
|
|
68
|
+
with the enclosing section ID as fallback.
|
|
69
|
+
|
|
70
|
+
Treat `unresolvedClaims` as unresolved. Label uncertainty as
|
|
71
|
+
`needs confirmation`; do not turn it into a confirmed narrative bridge.
|
|
72
|
+
Citations remain in the fact base and should inform the prose without becoming
|
|
73
|
+
a source dump.
|
|
74
|
+
|
|
75
|
+
## Review visual composition
|
|
76
|
+
|
|
77
|
+
Follow `references/visual-authoring.md` for hierarchy, responsive navigation,
|
|
78
|
+
tables, diagrams, and the final composition check. The page itself must not
|
|
79
|
+
overflow horizontally. Put intrinsically wide content inside a bounded,
|
|
80
|
+
scrollable container.
|
|
81
|
+
|
|
82
|
+
## Submit host-rung evidence
|
|
83
|
+
|
|
84
|
+
When the host has browser capability:
|
|
85
|
+
|
|
86
|
+
1. Open `file://<run-root>/site/index.html`.
|
|
87
|
+
2. Capture the page at widths 320, 768, and 1440 into
|
|
88
|
+
`<run-root>/qa/320.png`, `768.png`, and `1440.png`.
|
|
89
|
+
3. Inspect all three screenshots. Confirm no horizontal page overflow, every
|
|
90
|
+
required section is visible, headings remain readable at 320 pixels, and no
|
|
91
|
+
text overlaps.
|
|
92
|
+
4. Compute the SHA-256 of the exact `site/index.html` bytes captured.
|
|
93
|
+
5. Run `verify.mjs` with `--rung host`, `--screenshots <run-root>/qa`,
|
|
94
|
+
`--artifact-sha256 <sha256:hex>`, `--visual-verdict pass|findings`, and
|
|
95
|
+
concise `--visual-notes`.
|
|
96
|
+
|
|
97
|
+
A screenshot capture without inspection is not verification. If the artifact
|
|
98
|
+
hash or any PNG binding is invalid, verification records the browser rung as
|
|
99
|
+
`none`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "explainer-kit.manifest/
|
|
4
|
-
"title": "
|
|
3
|
+
"$id": "explainer-kit.manifest/v2",
|
|
4
|
+
"title": "ArtifactManifestV2",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"additionalProperties": false,
|
|
7
7
|
"required": [
|
|
@@ -10,16 +10,16 @@
|
|
|
10
10
|
"slug",
|
|
11
11
|
"recipe",
|
|
12
12
|
"createdAt",
|
|
13
|
+
"mode",
|
|
13
14
|
"source",
|
|
14
15
|
"theme",
|
|
15
16
|
"artifacts",
|
|
16
17
|
"immutableHashes",
|
|
17
18
|
"outcome",
|
|
18
|
-
"buildRecord",
|
|
19
19
|
"warnings"
|
|
20
20
|
],
|
|
21
21
|
"properties": {
|
|
22
|
-
"schemaVersion": { "const": "explainer-kit.manifest/
|
|
22
|
+
"schemaVersion": { "const": "explainer-kit.manifest/v2" },
|
|
23
23
|
"runId": { "type": "string", "minLength": 1 },
|
|
24
24
|
"slug": {
|
|
25
25
|
"type": "string",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"createdAt": { "type": "string", "format": "date-time" },
|
|
38
|
+
"mode": { "enum": ["unattended", "interactive"] },
|
|
38
39
|
"source": {
|
|
39
40
|
"type": "object",
|
|
40
41
|
"additionalProperties": false,
|
|
@@ -42,63 +43,27 @@
|
|
|
42
43
|
"properties": {
|
|
43
44
|
"factBasePath": { "$ref": "#/$defs/safeRelativePath" },
|
|
44
45
|
"factBaseHash": { "$ref": "#/$defs/hash" },
|
|
45
|
-
"
|
|
46
|
-
"inputHashes": { "$ref": "#/$defs/hashMap" },
|
|
47
|
-
"authorResultPaths": {
|
|
48
|
-
"type": "array",
|
|
49
|
-
"items": { "$ref": "#/$defs/safeRelativePath" },
|
|
50
|
-
"minItems": 1,
|
|
51
|
-
"uniqueItems": true
|
|
52
|
-
},
|
|
53
|
-
"backlinks": {
|
|
54
|
-
"type": "array",
|
|
55
|
-
"items": { "$ref": "#/$defs/sourceBacklink" },
|
|
56
|
-
"uniqueItems": true
|
|
57
|
-
}
|
|
46
|
+
"inputHashes": { "$ref": "#/$defs/hashMap" }
|
|
58
47
|
}
|
|
59
48
|
},
|
|
60
49
|
"theme": {
|
|
61
50
|
"type": "object",
|
|
62
51
|
"additionalProperties": false,
|
|
63
|
-
"required": ["path", "hash"
|
|
52
|
+
"required": ["path", "hash"],
|
|
64
53
|
"properties": {
|
|
65
54
|
"path": { "const": "theme.resolved.json" },
|
|
66
|
-
"hash": { "$ref": "#/$defs/hash" }
|
|
67
|
-
"derived": { "type": "boolean" }
|
|
55
|
+
"hash": { "$ref": "#/$defs/hash" }
|
|
68
56
|
}
|
|
69
57
|
},
|
|
70
58
|
"artifacts": {
|
|
71
59
|
"type": "array",
|
|
72
60
|
"items": { "$ref": "#/$defs/artifactEntry" },
|
|
61
|
+
"minItems": 1,
|
|
73
62
|
"uniqueItems": true
|
|
74
63
|
},
|
|
75
64
|
"immutableHashes": { "$ref": "#/$defs/hashMap" },
|
|
76
65
|
"outcome": {
|
|
77
|
-
"enum": [
|
|
78
|
-
"built-durable",
|
|
79
|
-
"built-not-durable",
|
|
80
|
-
"built-needs-review",
|
|
81
|
-
"failed",
|
|
82
|
-
"incomplete"
|
|
83
|
-
]
|
|
84
|
-
},
|
|
85
|
-
"buildRecord": {
|
|
86
|
-
"type": "object",
|
|
87
|
-
"additionalProperties": false,
|
|
88
|
-
"required": ["path", "hash"],
|
|
89
|
-
"properties": {
|
|
90
|
-
"path": { "const": "build-record.json" },
|
|
91
|
-
"hash": { "$ref": "#/$defs/hash" }
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
"publishReceipt": {
|
|
95
|
-
"type": "object",
|
|
96
|
-
"additionalProperties": false,
|
|
97
|
-
"required": ["path", "hash"],
|
|
98
|
-
"properties": {
|
|
99
|
-
"path": { "const": "publish-receipt.json" },
|
|
100
|
-
"hash": { "$ref": "#/$defs/hash" }
|
|
101
|
-
}
|
|
66
|
+
"enum": ["built", "built-needs-review", "failed", "incomplete"]
|
|
102
67
|
},
|
|
103
68
|
"warnings": {
|
|
104
69
|
"type": "array",
|
|
@@ -113,110 +78,23 @@
|
|
|
113
78
|
"safeRelativePath": {
|
|
114
79
|
"type": "string",
|
|
115
80
|
"minLength": 1,
|
|
116
|
-
"pattern": "^(?!/)(?!.*(?:^|/)
|
|
81
|
+
"pattern": "^(?!/)(?!.*//)(?!.*(?:^|/)(?:\\.|\\.\\.)(?:/|$))(?!.*\\\\).+$"
|
|
117
82
|
},
|
|
118
83
|
"hashMap": {
|
|
119
84
|
"type": "object",
|
|
120
|
-
"description": "Raw-byte SHA-256 coverage for the complete immutable package, including required browser, cohesion, visual-review attempt, and revision evidence.",
|
|
121
85
|
"propertyNames": { "$ref": "#/$defs/safeRelativePath" },
|
|
122
86
|
"additionalProperties": { "$ref": "#/$defs/hash" }
|
|
123
87
|
},
|
|
124
|
-
"sourceBacklink": {
|
|
125
|
-
"type": "object",
|
|
126
|
-
"additionalProperties": false,
|
|
127
|
-
"required": ["sourceId", "url"],
|
|
128
|
-
"properties": {
|
|
129
|
-
"sourceId": { "type": "string", "minLength": 1 },
|
|
130
|
-
"url": {
|
|
131
|
-
"type": "string",
|
|
132
|
-
"pattern": "^https://github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/blob/[a-f0-9]{40}/[^\\s?#]+#L[1-9][0-9]*(?:-L[1-9][0-9]*)?$"
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
"failure": {
|
|
137
|
-
"type": "object",
|
|
138
|
-
"additionalProperties": false,
|
|
139
|
-
"required": ["code", "message", "recovery"],
|
|
140
|
-
"properties": {
|
|
141
|
-
"code": { "type": "string", "minLength": 1 },
|
|
142
|
-
"message": { "type": "string", "minLength": 1 },
|
|
143
|
-
"recovery": {
|
|
144
|
-
"type": "array",
|
|
145
|
-
"items": { "type": "string", "minLength": 1 },
|
|
146
|
-
"minItems": 1
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
"durableEvidence": {
|
|
151
|
-
"type": "object",
|
|
152
|
-
"additionalProperties": false,
|
|
153
|
-
"required": ["kind", "ref", "paths", "attestedAt"],
|
|
154
|
-
"properties": {
|
|
155
|
-
"kind": { "enum": ["commit", "publish"] },
|
|
156
|
-
"ref": { "type": "string", "minLength": 1 },
|
|
157
|
-
"paths": {
|
|
158
|
-
"type": "array",
|
|
159
|
-
"items": { "$ref": "#/$defs/safeRelativePath" },
|
|
160
|
-
"minItems": 1,
|
|
161
|
-
"uniqueItems": true
|
|
162
|
-
},
|
|
163
|
-
"attestedAt": { "type": "string", "format": "date-time" },
|
|
164
|
-
"supersedes": {
|
|
165
|
-
"type": "object",
|
|
166
|
-
"additionalProperties": false,
|
|
167
|
-
"required": ["ref", "paths"],
|
|
168
|
-
"properties": {
|
|
169
|
-
"ref": { "type": "string", "minLength": 1 },
|
|
170
|
-
"paths": {
|
|
171
|
-
"type": "array",
|
|
172
|
-
"items": { "$ref": "#/$defs/safeRelativePath" },
|
|
173
|
-
"minItems": 1,
|
|
174
|
-
"uniqueItems": true
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
},
|
|
180
|
-
"rebuild": {
|
|
181
|
-
"type": "object",
|
|
182
|
-
"additionalProperties": false,
|
|
183
|
-
"required": ["argv", "cwd", "inputHashes"],
|
|
184
|
-
"properties": {
|
|
185
|
-
"argv": {
|
|
186
|
-
"type": "array",
|
|
187
|
-
"items": { "type": "string" },
|
|
188
|
-
"minItems": 1
|
|
189
|
-
},
|
|
190
|
-
"cwd": { "type": "string", "minLength": 1 },
|
|
191
|
-
"inputHashes": { "$ref": "#/$defs/hashMap" }
|
|
192
|
-
}
|
|
193
|
-
},
|
|
194
88
|
"artifactEntry": {
|
|
195
89
|
"type": "object",
|
|
196
90
|
"additionalProperties": false,
|
|
197
|
-
"required": ["id", "type", "contentPath", "
|
|
91
|
+
"required": ["id", "type", "contentPath", "hash", "status"],
|
|
198
92
|
"properties": {
|
|
199
93
|
"id": { "type": "string", "minLength": 1 },
|
|
200
94
|
"type": { "enum": ["hub", "diagram", "explainer", "deck", "catalog"] },
|
|
201
95
|
"contentPath": { "$ref": "#/$defs/safeRelativePath" },
|
|
202
|
-
"renderedPath": {
|
|
203
|
-
"allOf": [
|
|
204
|
-
{ "$ref": "#/$defs/safeRelativePath" },
|
|
205
|
-
{ "pattern": "^site/" }
|
|
206
|
-
],
|
|
207
|
-
"pattern": "^site/"
|
|
208
|
-
},
|
|
209
|
-
"mediaType": { "type": "string", "minLength": 1 },
|
|
210
|
-
"status": { "enum": ["built", "failed", "skipped"] },
|
|
211
96
|
"hash": { "$ref": "#/$defs/hash" },
|
|
212
|
-
"
|
|
213
|
-
"rebuild": { "$ref": "#/$defs/rebuild" },
|
|
214
|
-
"durableEvidence": {
|
|
215
|
-
"type": "array",
|
|
216
|
-
"items": { "$ref": "#/$defs/durableEvidence" },
|
|
217
|
-
"uniqueItems": true
|
|
218
|
-
},
|
|
219
|
-
"failure": { "$ref": "#/$defs/failure" }
|
|
97
|
+
"status": { "enum": ["built", "failed"] }
|
|
220
98
|
}
|
|
221
99
|
}
|
|
222
100
|
}
|