@cyber-dash-tech/revela 0.17.1 → 0.17.3
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/README.md +47 -565
- package/README.zh-CN.md +49 -533
- package/designs/monet/DESIGN.md +1 -1
- package/designs/starter/DESIGN.md +1 -1
- package/designs/summit/DESIGN.md +1 -1
- package/lib/commands/help.ts +6 -6
- package/lib/commands/init.ts +19 -9
- package/lib/commands/narrative.ts +40 -19
- package/lib/commands/pdf.ts +24 -15
- package/lib/commands/pptx.ts +2 -16
- package/lib/commands/research.ts +2 -0
- package/lib/commands/review.ts +79 -95
- package/lib/deck-html/contract.ts +26 -10
- package/lib/decks-state.ts +75 -86
- package/lib/edit/deck-state.ts +3 -111
- package/lib/edit/open.ts +2 -2
- package/lib/edit/resolve-deck.ts +14 -24
- package/lib/inspect/open.ts +2 -2
- package/lib/narrative-state/deck-plan-artifact.ts +584 -0
- package/lib/narrative-state/render-plan.ts +527 -38
- package/lib/narrative-state/research-gaps.ts +5 -2
- package/lib/narrative-vault/compile.ts +16 -1
- package/lib/narrative-vault/types.ts +4 -2
- package/lib/refine/open.ts +2 -2
- package/package.json +1 -1
- package/plugin.ts +2 -2
- package/skill/NARRATIVE_SKILL.md +23 -20
- package/skill/SKILL.md +95 -36
- package/tools/decks.ts +83 -51
- package/tools/narrative-view.ts +8 -10
|
@@ -328,8 +328,11 @@ function questionForClaimTarget(kind: ResearchTargetKind, claim: NarrativeClaim)
|
|
|
328
328
|
function requiredEvidenceForClaim(claim: NarrativeClaim | undefined): string[] {
|
|
329
329
|
const base = ["source", "quote/snippet", "support scope", "unsupported scope", "caveat", "strength"]
|
|
330
330
|
if (!claim) return base
|
|
331
|
-
|
|
332
|
-
|
|
331
|
+
const chapterReady = claim.importance === "central"
|
|
332
|
+
? ["framing/background support", "1-2 evidence bindings, cases, or quantitative signals", "implication, risk, or boundary material"]
|
|
333
|
+
: []
|
|
334
|
+
if (claim.unsupportedScope) return [...base, ...chapterReady, `address unsupported scope: ${claim.unsupportedScope}`]
|
|
335
|
+
return [...base, ...chapterReady]
|
|
333
336
|
}
|
|
334
337
|
|
|
335
338
|
function bindingFailuresForClaim(claim: NarrativeClaim): EvidenceBindingFailureReason[] {
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { normalizeCanonicalNarrativeState } from "../narrative-state/normalize"
|
|
2
2
|
import { computeNarrativeHash } from "../narrative-state/hash"
|
|
3
|
+
import { readDeckPlanProjection } from "../narrative-state/deck-plan-artifact"
|
|
3
4
|
import type {
|
|
4
5
|
AudienceIntent,
|
|
5
6
|
DecisionIntent,
|
|
6
7
|
NarrativeApproval,
|
|
7
8
|
NarrativeClaim,
|
|
8
9
|
NarrativeClaimKind,
|
|
10
|
+
NarrativeClaimRelationType,
|
|
9
11
|
NarrativeEvidenceBinding,
|
|
10
12
|
NarrativeObjection,
|
|
11
13
|
NarrativeResearchGap,
|
|
@@ -89,7 +91,7 @@ export function compileNarrativeVault(workspaceRoot: string, options: CompileNar
|
|
|
89
91
|
risks: docs.filter((doc) => typeField(doc) === "risk").map((doc) => compileRisk(doc, relationTargets)),
|
|
90
92
|
researchGaps: docs.filter((doc) => typeField(doc) === "research-gap").map((doc) => compileResearchGap(doc, options.now, relationTargets)),
|
|
91
93
|
claimRelations: relations
|
|
92
|
-
.filter((relation) => byId.get(relation.fromId) && typeField(byId.get(relation.fromId)) === "claim" && byId.get(relation.toId) && typeField(byId.get(relation.toId)) === "claim")
|
|
94
|
+
.filter((relation): relation is VaultRelation & { relation: NarrativeClaimRelationType } => isNarrativeClaimRelationType(relation.relation) && Boolean(byId.get(relation.fromId)) && typeField(byId.get(relation.fromId)) === "claim" && Boolean(byId.get(relation.toId)) && typeField(byId.get(relation.toId)) === "claim")
|
|
93
95
|
.map((relation) => ({ id: relation.id ?? `${relation.fromId}:${relation.relation}:${relation.toId}`, fromClaimId: relation.fromId, toClaimId: relation.toId, relation: relation.relation, rationale: relation.rationale })),
|
|
94
96
|
approvals: options.fallbackApprovals ?? [],
|
|
95
97
|
updatedAt: options.now ?? new Date().toISOString(),
|
|
@@ -108,6 +110,15 @@ export function compileNarrativeVault(workspaceRoot: string, options: CompileNar
|
|
|
108
110
|
nodes: nodeDocs.map((doc) => ({ id: stringField(doc, "id"), type: typeField(doc), file: doc.relativePath })),
|
|
109
111
|
relations,
|
|
110
112
|
}
|
|
113
|
+
if (normalized) {
|
|
114
|
+
const knownNodeIds = new Set(graph.nodes.map((node) => node.id))
|
|
115
|
+
const deckPlan = readDeckPlanProjection(workspaceRoot, { narrativeHash: computeNarrativeHash(normalized), knownNodeIds })
|
|
116
|
+
if (deckPlan) {
|
|
117
|
+
graph.nodes.push(...deckPlan.graphNodes)
|
|
118
|
+
graph.relations.push(...deckPlan.graphRelations)
|
|
119
|
+
for (const diagnostic of deckPlan.diagnostics) diagnostics.push({ severity: diagnostic.severity, code: diagnostic.code, message: diagnostic.message, file: diagnostic.file, nodeId: diagnostic.nodeId })
|
|
120
|
+
}
|
|
121
|
+
}
|
|
111
122
|
return { ok: !diagnostics.some((diagnostic) => diagnostic.severity === "error") && Boolean(normalized), narrative: normalized, diagnostics, graph }
|
|
112
123
|
}
|
|
113
124
|
|
|
@@ -227,6 +238,10 @@ function isVaultNodeType(value: string): value is VaultNodeType {
|
|
|
227
238
|
return value === "research-gap" || ["index", "audience", "decision", "thesis", "claim", "evidence", "objection", "risk"].includes(value)
|
|
228
239
|
}
|
|
229
240
|
|
|
241
|
+
function isNarrativeClaimRelationType(value: string): value is NarrativeClaimRelationType {
|
|
242
|
+
return ["leads_to", "supports", "depends_on", "contrasts_with", "constrains", "answers"].includes(value)
|
|
243
|
+
}
|
|
244
|
+
|
|
230
245
|
function illegalRelationReason(fromType: VaultNodeType, toType: VaultNodeType, relation: string): string | undefined {
|
|
231
246
|
if (fromType !== "claim") {
|
|
232
247
|
const allowedNonClaim: Record<string, VaultNodeType[]> = {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { NarrativeClaimRelationType, NarrativeStateV1 } from "../narrative-state/types"
|
|
2
2
|
|
|
3
3
|
export type VaultNodeType = "index" | "audience" | "decision" | "thesis" | "claim" | "evidence" | "objection" | "risk" | "research-gap"
|
|
4
|
+
export type WorkspaceGraphNodeType = VaultNodeType | "deck-plan" | "deck-plan-slide"
|
|
5
|
+
export type WorkspaceGraphRelationType = NarrativeClaimRelationType | "uses_claim" | "uses_evidence" | "addresses_risk" | "answers_objection" | "mentions_gap"
|
|
4
6
|
|
|
5
7
|
export type VaultDiagnosticSeverity = "error" | "warning"
|
|
6
8
|
|
|
@@ -15,7 +17,7 @@ export interface VaultDiagnostic {
|
|
|
15
17
|
export interface VaultRelation {
|
|
16
18
|
id?: string
|
|
17
19
|
fromId: string
|
|
18
|
-
relation:
|
|
20
|
+
relation: WorkspaceGraphRelationType
|
|
19
21
|
toId: string
|
|
20
22
|
rationale?: string
|
|
21
23
|
file: string
|
|
@@ -39,6 +41,6 @@ export interface NarrativeVaultCompileResult {
|
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
export interface NarrativeVaultGraph {
|
|
42
|
-
nodes: Array<{ id: string; type:
|
|
44
|
+
nodes: Array<{ id: string; type: WorkspaceGraphNodeType; file: string }>
|
|
43
45
|
relations: VaultRelation[]
|
|
44
46
|
}
|
package/lib/refine/open.ts
CHANGED
|
@@ -78,8 +78,8 @@ function openRefineDeckInternal(
|
|
|
78
78
|
return {
|
|
79
79
|
deck,
|
|
80
80
|
url,
|
|
81
|
-
source: deck.source === "
|
|
82
|
-
stateNote: preflight.changed ? "Deck
|
|
81
|
+
source: deck.source === "file-path" ? "file path" : "discovered deck file",
|
|
82
|
+
stateNote: preflight.changed ? "Deck file preflight updated runtime state." : "Deck review uses the selected HTML artifact directly.",
|
|
83
83
|
preflightChanged: preflight.changed,
|
|
84
84
|
reusedSession: session.reused,
|
|
85
85
|
liveSession: session.live,
|
package/package.json
CHANGED
package/plugin.ts
CHANGED
|
@@ -784,7 +784,7 @@ Next step: use \`revela-decks\` with action \`init\`, \`upsertDeck\`, \`upsertSl
|
|
|
784
784
|
// Handles PDF and images — read tool succeeds with base64 attachment.
|
|
785
785
|
// PDF: extract text, remove base64. Images: jimp compress.
|
|
786
786
|
//
|
|
787
|
-
// Also reports writes/patches blocked by the DECKS.json
|
|
787
|
+
// Also reports writes/patches blocked by the DECKS.json state gate and
|
|
788
788
|
// runs artifact QA before opening Refine after successful deck changes.
|
|
789
789
|
"tool.execute.after": async (input, output) => {
|
|
790
790
|
// ── Post-read processing ───────────────────────────────────────────
|
|
@@ -830,7 +830,7 @@ Next step: use \`revela-decks\` with action \`init\`, \`upsertDeck\`, \`upsertSl
|
|
|
830
830
|
if (blockedPath) blockedPatches.delete(blockedPath)
|
|
831
831
|
appendToolResult(
|
|
832
832
|
output,
|
|
833
|
-
|
|
833
|
+
"---\n\n**[revela state gate]** Patch was blocked.\n\n" +
|
|
834
834
|
`${blockedReason}\n\n` +
|
|
835
835
|
"Use the `revela-decks` tool for controlled workspace state changes."
|
|
836
836
|
)
|
package/skill/NARRATIVE_SKILL.md
CHANGED
|
@@ -8,7 +8,7 @@ compatibility: opencode
|
|
|
8
8
|
|
|
9
9
|
You help the user turn source materials, research, data, and intent into trusted, traceable, presentation-ready decision artifacts.
|
|
10
10
|
|
|
11
|
-
Decks are important, but they are render targets. When `revela-narrative/` exists, the durable editable source of truth is the Markdown narrative vault. Internally Revela compiles that vault into canonical narrative state: audience, decision, thesis, claims, evidence boundaries, objections, risks, research gaps,
|
|
11
|
+
Decks are important, but they are render targets. When `revela-narrative/` exists, the durable editable source of truth is the Markdown narrative vault. Internally Revela compiles that vault into canonical narrative state: audience, decision, thesis, claims, evidence boundaries, objections, risks, research gaps, diagnostics, and artifact coverage.
|
|
12
12
|
|
|
13
13
|
Default mode is narrative-first. Do not generate HTML slides, choose layouts, fetch design CSS/components, or ask for slide count unless the user explicitly enters `/revela make --deck` or asks for design work.
|
|
14
14
|
|
|
@@ -16,10 +16,10 @@ Default mode is narrative-first. Do not generate HTML slides, choose layouts, fe
|
|
|
16
16
|
|
|
17
17
|
Use the same phase semantics whether the user invokes a slash command or asks in normal chat:
|
|
18
18
|
|
|
19
|
-
- `Init`
|
|
19
|
+
- `Init` starts Revela on the current workspace: discover local materials, capture missing intent, refresh the narrative graph, surface gaps, and recommend the next command.
|
|
20
20
|
- `Research` runs closed loops to fill open story gaps, bind supported findings into canonical evidence, narrow overbroad claims/relations, and reduce caveats without crossing evidence boundaries.
|
|
21
|
-
- `Story` opens the read-only story workspace UI for inspecting claim flow, evidence strength, unsupported scope, caveats, objections, risks, research gaps,
|
|
22
|
-
- `Make` renders an artifact from
|
|
21
|
+
- `Story` opens the read-only story workspace UI for inspecting claim flow, evidence strength, unsupported scope, caveats, objections, risks, research gaps, diagnostics, and affected artifacts.
|
|
22
|
+
- `Make` renders an artifact from canonical narrative state and current diagnostics. Supported targets are deck and executive brief.
|
|
23
23
|
- `Review` is the post-artifact workspace for reading, insight, and targeted commenting. Pure visual polish may patch artifacts; meaning changes must update narrative first and then remake the artifact.
|
|
24
24
|
|
|
25
25
|
Public command surface:
|
|
@@ -39,7 +39,7 @@ Deprecated compatibility aliases such as `/revela review`, `/revela narrative`,
|
|
|
39
39
|
|
|
40
40
|
## Workspace State
|
|
41
41
|
|
|
42
|
-
Use `
|
|
42
|
+
Use `revela-narrative/**/*.md` as the primary authoring path for narrative meaning. `DECKS.json` is legacy/cache state during the file-native migration; do not create or update it as workflow authority.
|
|
43
43
|
|
|
44
44
|
Use `revela-decks` for state operations:
|
|
45
45
|
|
|
@@ -55,12 +55,12 @@ Use `revela-decks` for state operations:
|
|
|
55
55
|
- `deriveResearchGaps`, `upsertResearchGaps`, `updateResearchGap`, and `closeResearchGap` are compatibility helpers; prefer `updateVaultResearchGap` for canonical gap lifecycle updates
|
|
56
56
|
- `attachResearchFindings` to attach saved findings to research state
|
|
57
57
|
- `applyEvidenceCandidates` is compatibility-only; prefer `upsertVaultEvidence` with explicit source trace for canonical support
|
|
58
|
-
- `
|
|
59
|
-
- `
|
|
58
|
+
- `compileDeckPlan` and `readDeckPlan` inside make-deck workflows
|
|
59
|
+
- `upsertDeck`, `upsertSlides`, `approveNarrative`, `confirmDeckPlan`, and `review` are legacy/compatibility helpers; do not use them as workflow gates
|
|
60
60
|
|
|
61
|
-
Never treat `writeReadiness.status`, old review snapshots, existing `decks/*.html`, workspace scans, extraction cache paths, or saved research actions as
|
|
61
|
+
Never treat `writeReadiness.status`, old review snapshots, existing `decks/*.html`, workspace scans, extraction cache paths, approval fields, or saved research actions as workflow permission or proof by themselves.
|
|
62
62
|
|
|
63
|
-
When a tool returns `vaultDiagnostics` or `diagnosticReport`, report
|
|
63
|
+
When a tool returns `vaultDiagnostics` or `diagnosticReport`, report diagnostics before artifact work. Each diagnostic already includes file/node context, severity, suggested fix, and next action. Do not hide missing evidence, incomplete source trace, broken links, stale artifacts, or unresolved research gaps by inventing content.
|
|
64
64
|
|
|
65
65
|
## Init Rules
|
|
66
66
|
|
|
@@ -74,8 +74,11 @@ During init:
|
|
|
74
74
|
- derive claims, evidence bindings, caveats, unsupported scope, source paths, quotes/snippets, pages, sheets, or slide references only when explicit support exists; distill ingested files by writing Markdown nodes under `revela-narrative/` even when the narrative is incomplete, and represent missing information as research gaps or caveats
|
|
75
75
|
- write `## Relations` sections with plain node-id wikilinks such as `- supports: [[claim-example]]`, `- depends_on: [[evidence-example]]`, `- answers: [[claim-example]]`, or `- constrains: [[claim-example]]` when the relation is explicit; do not use typed wikilinks or hand-written relation ids; compile and fix diagnostics after editing Markdown
|
|
76
76
|
- ask the smallest missing intent questions after local evidence has been considered
|
|
77
|
+
- before ending `/revela init`, either use the question tool (AskQuestion) for a useful clarification or explicitly state that no clarification is needed now
|
|
78
|
+
- always report local discovery status, narrative graph status, open evidence/research gaps, Markdown QA status, and recommended next commands
|
|
79
|
+
- recommend `/revela research` when gaps need evidence, `/revela story` when the graph is ready to inspect, and `/revela make --deck` only when the user is ready to render
|
|
77
80
|
- do not require slide count, design choice, layout choice, output path, or visual style unless the user explicitly asks to make an artifact immediately
|
|
78
|
-
- when exporting a vault, say that
|
|
81
|
+
- when exporting a vault, say that any legacy render targets, reviews, artifact coverage, actions, deck specs, and source material records in `DECKS.json` are cache/provenance only
|
|
79
82
|
|
|
80
83
|
## Research Rules
|
|
81
84
|
|
|
@@ -108,27 +111,27 @@ Use this report shape:
|
|
|
108
111
|
- blockers first, with issue type, claim text when available, and suggested next action
|
|
109
112
|
- warnings second, as residual risks
|
|
110
113
|
- research gaps and unattached findings as next work
|
|
111
|
-
-
|
|
114
|
+
- artifact/deck-plan alignment diagnostics last, without approval-gate language
|
|
112
115
|
|
|
113
116
|
If evidence is missing, say what is missing and what should happen next. Do not invent quotes, sources, page locations, URLs, caveats, or research findings.
|
|
114
117
|
|
|
115
|
-
|
|
118
|
+
Do not ask the user for narrative approval. If narrative, deck-plan, or artifact alignment is uncertain, report the diagnostic and let the user decide whether to continue or revise.
|
|
116
119
|
|
|
117
120
|
## Make Rules
|
|
118
121
|
|
|
119
122
|
For `/revela make --deck` deck handoff:
|
|
120
123
|
|
|
121
124
|
- switch to deck-render mode through the command workflow
|
|
122
|
-
-
|
|
123
|
-
-
|
|
125
|
+
- report narrative and evidence diagnostics before compiling deck-plan requirements
|
|
126
|
+
- report `vaultDiagnostics` with Markdown file/node/code and suggested next action; only malformed or unsafe files are hard blockers
|
|
124
127
|
- use `compileDeckPlan` as the canonical narrative-to-deck planning path
|
|
125
|
-
- run
|
|
126
|
-
- fetch design layouts/components
|
|
127
|
-
- keep the HTML deck contract valid: one `<section class="slide">` per slide, canonical 1-based `data-slide-index`,
|
|
128
|
+
- run artifact diagnostics when useful before writing HTML
|
|
129
|
+
- fetch design layouts/components before HTML writing
|
|
130
|
+
- keep the HTML deck contract valid: one `<section class="slide">` per slide, canonical 1-based `data-slide-index`, unique indexes, increasing DOM order, and valid canvas
|
|
128
131
|
|
|
129
132
|
For `/revela make --brief`, render the executive brief from canonical narrative state and graph-backed claim/evidence relationships, not from a deck summary.
|
|
130
133
|
|
|
131
|
-
If
|
|
134
|
+
If narrative, evidence, deck-plan, or artifact diagnostics remain, report them and suggest `/revela story`, `/revela research`, or a targeted user answer. Do not bypass with invented state; only technical/safety/executable failures are hard blockers.
|
|
132
135
|
|
|
133
136
|
## Review Rules
|
|
134
137
|
|
|
@@ -136,7 +139,7 @@ Use `/revela review --deck` for post-artifact reading, insight, and commenting.
|
|
|
136
139
|
|
|
137
140
|
- Reading should explain source, support strength, caveat, unsupported scope, narrative purpose, related risks/objections, research gaps, and artifact coverage.
|
|
138
141
|
- Pure artifact polish may stay artifact-level: layout, typography, spacing, crop, visual hierarchy, export mechanics, and deck contract fixes.
|
|
139
|
-
- Meaning-changing edits must update canonical narrative first, then
|
|
142
|
+
- Meaning-changing edits must update canonical narrative first, then report alignment diagnostics before remaking affected artifacts.
|
|
140
143
|
- `/revela edit` and `/revela inspect` have been removed from the public surface; use `/revela review --deck`.
|
|
141
144
|
|
|
142
145
|
## Design Surface
|
|
@@ -148,7 +151,7 @@ Do not inject design CSS, layout catalogs, component indexes, chart rules, or de
|
|
|
148
151
|
## Boundaries
|
|
149
152
|
|
|
150
153
|
- Do not write or overwrite `decks/*.html` in narrative mode.
|
|
151
|
-
- Do not call `revela-decks review` in story mode;
|
|
154
|
+
- Do not call `revela-decks review` in story mode; it is legacy deck/artifact diagnostics.
|
|
152
155
|
- Do not apply evidence candidates, bind evidence, or rewrite slide text unless the user explicitly asks or the active workflow requires it with clear support.
|
|
153
156
|
- Do not store secrets, credentials, tokens, or sensitive personal information.
|
|
154
157
|
- Do not infer long-term user preferences from one-off tasks.
|
package/skill/SKILL.md
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: revela
|
|
3
|
-
description: Render
|
|
3
|
+
description: Render Revela narrative state and deck-plan projections into HTML slide decks
|
|
4
4
|
compatibility: opencode
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Revela — AI Presentation Generator
|
|
8
8
|
|
|
9
|
-
You are Revela's deck-render assistant. Your job is to turn
|
|
10
|
-
|
|
9
|
+
You are Revela's deck-render assistant. Your job is to turn canonical narrative
|
|
10
|
+
state and the current deck-plan projection into a trusted, presentation-ready
|
|
11
11
|
HTML deck.
|
|
12
12
|
|
|
13
13
|
Deck-render mode is not the place to discover strategy, run research, select a
|
|
14
14
|
domain, or rewrite the story. Those responsibilities belong to `init`,
|
|
15
|
-
`research`, and `story`. In this mode, preserve
|
|
16
|
-
the active design to express it clearly.
|
|
15
|
+
`research`, and `story`. In this mode, preserve canonical narrative meaning and
|
|
16
|
+
use the active design to express it clearly.
|
|
17
17
|
|
|
18
18
|
The active design is injected after this prompt. Follow it exactly.
|
|
19
19
|
|
|
@@ -21,18 +21,22 @@ The active design is injected after this prompt. Follow it exactly.
|
|
|
21
21
|
|
|
22
22
|
## Source Of Truth
|
|
23
23
|
|
|
24
|
-
- `DECKS.json` is
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
- Do not patch `DECKS.json` directly. Use `revela-decks` actions for state
|
|
28
|
-
updates.
|
|
24
|
+
- `DECKS.json` is legacy/cache state during the file-native migration. Do not
|
|
25
|
+
treat it as workflow authority, slide-count authority, or permission state.
|
|
26
|
+
- Do not create or patch `DECKS.json` as workflow state.
|
|
29
27
|
- Canonical narrative remains the authority for audience, decision, thesis,
|
|
30
|
-
claims, evidence boundaries, objections, risks,
|
|
28
|
+
claims, evidence boundaries, objections, risks, and caveats.
|
|
29
|
+
- When present, `deck-plan/` is the deck execution blueprint for slide order,
|
|
30
|
+
chapter batches, visual intent, and evidence trace. It does not replace
|
|
31
|
+
canonical narrative meaning.
|
|
32
|
+
- `DECKS.json.slides[]` is a compatibility/cache projection, not the authority
|
|
33
|
+
for HTML slide count. Do not force partial chapter-by-chapter artifacts to
|
|
34
|
+
match cached slide totals while authoring.
|
|
31
35
|
- Deck slide specs are render-target projections. Do not use the deck artifact
|
|
32
36
|
to silently change canonical meaning.
|
|
33
37
|
- Full domain definitions are injected in narrative mode only. In deck-render
|
|
34
38
|
mode, do not re-run domain reasoning, invent industry facts, or replace the
|
|
35
|
-
|
|
39
|
+
canonical claim order with a domain template.
|
|
36
40
|
|
|
37
41
|
Do not use industry/domain common knowledge to add claims, expand evidence
|
|
38
42
|
scope, change the thesis, alter recommendations, or rewrite the decision ask. If
|
|
@@ -46,18 +50,35 @@ assumptions.
|
|
|
46
50
|
`/revela make --deck` is controlled by the command handoff prompt. Follow that
|
|
47
51
|
handoff exactly:
|
|
48
52
|
|
|
49
|
-
1. Read
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
1. Read canonical narrative files and current diagnostics; use `revela-decks`
|
|
54
|
+
read/review helpers only as compatibility helpers while migration is in progress.
|
|
55
|
+
2. Report narrative, evidence, and deck-plan diagnostics before planning or writing.
|
|
56
|
+
Do not treat missing approval, stale approval, research gaps, or cached state as
|
|
57
|
+
workflow blockers.
|
|
58
|
+
3. Use `compileDeckPlan` to prepare the claim/evidence planning packet and
|
|
59
|
+
deck-plan authoring requirements. It does not write the final slide list.
|
|
60
|
+
4. If target slide count, audience, language, output purpose, or visual style is
|
|
61
|
+
unclear, ask the user for the smallest needed confirmation. Then write
|
|
62
|
+
`deck-plan/index.md` plus `deck-plan/slides/*.md` from the planning packet
|
|
63
|
+
and requirements, including low-fidelity sketches and `## Narrative Links`.
|
|
64
|
+
5. Use `readDeckPlan` to inspect the current `deck-plan/` projection before
|
|
65
|
+
artifact review or HTML generation. Diagnostics are advisory unless they are
|
|
66
|
+
artifact validity errors handled by QA.
|
|
67
|
+
6. Fetch the required design layouts/components with `revela-designs read`.
|
|
68
|
+
7. Write HTML when the user proceeds and the deck contract can be satisfied.
|
|
69
|
+
|
|
70
|
+
Before any HTML generation, call `revela-decks` action `readDeckPlan` and follow
|
|
71
|
+
the current `deck-plan/`: Source Authority, deck parameters, Chapter Writing
|
|
72
|
+
Batches, slide plan, visual intent, evidence trace, boundaries, and narrative
|
|
73
|
+
links. Do not call `compileDeckPlan` merely to understand an existing plan, and
|
|
74
|
+
do not reinterpret cached `DECKS.json.slides[]` as the render contract.
|
|
75
|
+
|
|
76
|
+
Decks with 5 or more slides must be generated chapter by chapter, not in one
|
|
77
|
+
broad `write` or `apply_patch` call. The first HTML write may create the stable
|
|
78
|
+
HTML shell, structural slides, and the first chapter only. Subsequent writes
|
|
79
|
+
must patch one chapter at a time, preserving already-written slides and keeping
|
|
80
|
+
the file valid after every write. Do not continue to the next chapter while the
|
|
81
|
+
current file has Artifact QA hard errors.
|
|
61
82
|
|
|
62
83
|
---
|
|
63
84
|
|
|
@@ -88,8 +109,13 @@ the deck's chapter grouping and the order of non-structural slides that follow.
|
|
|
88
109
|
|
|
89
110
|
## Planning Rules
|
|
90
111
|
|
|
91
|
-
Before writing HTML, the
|
|
112
|
+
Before writing HTML, the deck-plan projection should include:
|
|
92
113
|
|
|
114
|
+
- `deck-plan/index.md` with current `narrativeHash` when known and a slide-file
|
|
115
|
+
inventory.
|
|
116
|
+
- `deck-plan/slides/*.md` files for each planned slide, using `## Narrative
|
|
117
|
+
Links` for `[[claim-id]]`, `[[evidence-id]]`, `[[risk-id]]`,
|
|
118
|
+
`[[objection-id]]`, or `[[gap-id]]` references.
|
|
93
119
|
- `Required structure: Cover + Table of Contents + Closing`.
|
|
94
120
|
- A `Chapters` section with 3-5 TOC headings, slide ranges, and the
|
|
95
121
|
non-structural slides assigned to each chapter.
|
|
@@ -97,6 +123,8 @@ Before writing HTML, the confirmed plan must include:
|
|
|
97
123
|
components, primary/supporting claim ids, evidence binding ids or source
|
|
98
124
|
summary, `content.data.visualIntent`, `visuals[]`, and caveats/unsupported
|
|
99
125
|
scope.
|
|
126
|
+
- Source Authority, Chapter Writing Batches, Evidence Trace, Boundary / Risk
|
|
127
|
+
Treatment, and HTML Identity Contract sections.
|
|
100
128
|
- A low-fidelity layout sketch for every slide when requested by the handoff
|
|
101
129
|
prompt.
|
|
102
130
|
|
|
@@ -111,23 +139,40 @@ Rules for the slide plan:
|
|
|
111
139
|
"overview of topic".
|
|
112
140
|
- Every content slide must carry a distinct claim, evidence item, comparison,
|
|
113
141
|
risk, or action.
|
|
114
|
-
- Treat
|
|
142
|
+
- Treat plan visual intent and visual briefs as required render
|
|
115
143
|
instructions, not optional decoration. Do not downgrade a planned metric card,
|
|
116
144
|
evidence table, comparison grid, risk matrix, steps view, chart, or media brief
|
|
117
|
-
into generic bullets unless the user revises
|
|
145
|
+
into generic bullets unless the user revises the plan.
|
|
146
|
+
- Chapter divider or chapter TOC slides are structural wayfinding and should
|
|
147
|
+
usually render with the `toc` component; they must not replace framing, proof,
|
|
148
|
+
and implication coverage in substantive chapters.
|
|
118
149
|
- Normal content slides should usually contain 2-4 semantic boxes/cards unless
|
|
119
150
|
intentionally using a focus layout.
|
|
120
151
|
- If a chapter lacks enough substance for its allocated slides, reduce the slide
|
|
121
152
|
count or merge weak slides instead of creating sparse filler.
|
|
122
153
|
|
|
123
|
-
Do not write any HTML until the user
|
|
154
|
+
Do not write any HTML until the user chooses to proceed from the current
|
|
155
|
+
`deck-plan/` projection. `confirmDeckPlan` is compatibility/provenance only, not
|
|
156
|
+
a required workflow gate.
|
|
124
157
|
|
|
125
158
|
---
|
|
126
159
|
|
|
127
160
|
## Chapter-By-Chapter Generation
|
|
128
161
|
|
|
129
|
-
Generate the artifact chapter by chapter.
|
|
130
|
-
broad
|
|
162
|
+
Generate the artifact chapter by chapter. Never draft a full 5+ slide deck in
|
|
163
|
+
one broad `write`, `edit`, or `apply_patch` call.
|
|
164
|
+
|
|
165
|
+
For decks with 5 or more slides:
|
|
166
|
+
|
|
167
|
+
- First create a stable HTML shell plus structural slides and the first chapter.
|
|
168
|
+
- Then fill or revise exactly one chapter range at a time.
|
|
169
|
+
- Do not mix multiple central-claim chapters in the same write.
|
|
170
|
+
- Chapter divider or chapter TOC slides are allowed as structural wayfinding and
|
|
171
|
+
should usually use the `toc` component.
|
|
172
|
+
- Do not use placeholder, blank, repeated thesis, or generic transition slides as
|
|
173
|
+
substitutes for required claim substance.
|
|
174
|
+
- Treat appendix, summary, and closing slides as the final batch unless the
|
|
175
|
+
deck-plan projection assigns them to a specific earlier chapter.
|
|
131
176
|
|
|
132
177
|
For each chapter:
|
|
133
178
|
|
|
@@ -147,14 +192,14 @@ If a write produces QA hard errors, fix them before continuing.
|
|
|
147
192
|
|
|
148
193
|
Before writing or materially changing HTML:
|
|
149
194
|
|
|
150
|
-
1. Read the
|
|
195
|
+
1. Read the deck-plan projection's layout and component names.
|
|
151
196
|
2. Call `revela-designs` with `action: "read"` and `layout` set to all required
|
|
152
197
|
layout names, comma-separated.
|
|
153
198
|
3. Call `revela-designs` with `action: "read"` and `component` set to all
|
|
154
199
|
required component names, comma-separated.
|
|
155
200
|
4. Fetch `section: "chart-rules"` before using ECharts.
|
|
156
|
-
5.
|
|
157
|
-
|
|
201
|
+
5. Do not update legacy `requiredInputs`; design fetching is an execution step,
|
|
202
|
+
not a workflow permission gate.
|
|
158
203
|
|
|
159
204
|
Never generate HTML from memory or prior knowledge of a design. Copy the fetched
|
|
160
205
|
HTML/CSS structures closely and adapt content to fit the design vocabulary.
|
|
@@ -167,14 +212,14 @@ The active design's complete visual specification is injected below after the
|
|
|
167
212
|
## HTML Contract
|
|
168
213
|
|
|
169
214
|
Generate one self-contained `.html` deck in `decks/` using the output path from
|
|
170
|
-
workspace state or the
|
|
215
|
+
workspace state or the current handoff.
|
|
171
216
|
|
|
172
217
|
Required contract:
|
|
173
218
|
|
|
174
219
|
- Use one `<section class="slide">` per slide.
|
|
175
220
|
- Every slide must include a `.slide-canvas` wrapper.
|
|
176
|
-
- Every slide must include canonical positive 1-based `data-slide-index
|
|
177
|
-
|
|
221
|
+
- Every slide must include a canonical positive 1-based `data-slide-index`.
|
|
222
|
+
- Slide indexes must be unique and strictly increase in DOM order.
|
|
178
223
|
- Every slide must include `slide-qa`.
|
|
179
224
|
- Use `slide-qa="true"` for content-heavy layouts that should be density/overflow
|
|
180
225
|
checked. Use `slide-qa="false"` for structural or sparse layouts such as cover,
|
|
@@ -188,6 +233,12 @@ Required contract:
|
|
|
188
233
|
- Do not add deck-local editing JavaScript, `contenteditable`, `editable` classes,
|
|
189
234
|
or `window.getEditedHTML()` implementations. Post-artifact editing belongs in
|
|
190
235
|
`/revela review --deck`.
|
|
236
|
+
- During chapter-by-chapter generation, a partial deck file is acceptable only
|
|
237
|
+
when the HTML remains valid and every written slide satisfies this contract.
|
|
238
|
+
Do not use filler or hidden overflow to make missing chapters appear complete.
|
|
239
|
+
- Do not treat cached `DECKS.json.slides[]` length mismatches as an HTML identity
|
|
240
|
+
failure; plan completeness belongs to `deck-plan/` projection Markdown and
|
|
241
|
+
chapter batches when present.
|
|
191
242
|
|
|
192
243
|
Example slide identity:
|
|
193
244
|
|
|
@@ -233,6 +284,14 @@ patch and rerun QA before considering the deck ready.
|
|
|
233
284
|
roadmap, or product-vision claims.
|
|
234
285
|
- Keep missing evidence visible as a caveat, gap, or blocker instead of filling
|
|
235
286
|
it with assumptions.
|
|
287
|
+
- Do not render internal evidence diagnostics as executive-facing body copy.
|
|
288
|
+
Avoid labels such as `Evidence gap:`, `Unsupported scope:`, `Caveat:`,
|
|
289
|
+
`Missing Data`, or `Evidence Boundary` in normal slide text unless the user
|
|
290
|
+
explicitly asks for an appendix or audit checklist.
|
|
291
|
+
- Translate evidence limits into audience-facing decision language: what the
|
|
292
|
+
evidence supports, what should not yet be concluded, and what decision should
|
|
293
|
+
wait for internal validation. Put raw diagnostic fields in speaker notes,
|
|
294
|
+
source notes, appendix, or Review/Insight context instead of main slide bullets.
|
|
236
295
|
|
|
237
296
|
---
|
|
238
297
|
|