@mgiles/perk 3.1.0 → 3.3.0
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 +5 -0
- package/extension/authoring/gist/draft.ts +198 -0
- package/extension/authoring/gist/prose.ts +46 -0
- package/extension/authoring/gist/review.ts +133 -0
- package/extension/authoring/gist/save.ts +118 -0
- package/extension/authoring/objective/draft.ts +345 -0
- package/extension/{factories/objectiveDreamReport.ts → authoring/objective/dreamReportGate.ts} +74 -131
- package/extension/authoring/objective/planning.ts +124 -0
- package/extension/authoring/objective/prose.ts +103 -0
- package/extension/authoring/objective/review.ts +128 -0
- package/extension/authoring/objective/save.ts +224 -0
- package/extension/authoring/plan/draft.ts +84 -0
- package/extension/authoring/plan/prose.ts +41 -0
- package/extension/authoring/plan/review.ts +269 -0
- package/extension/authoring/plan/save.ts +256 -0
- package/extension/authoring/plan/source.ts +82 -0
- package/extension/authoring/refinement/context.ts +468 -0
- package/extension/authoring/refinement/draft.ts +261 -0
- package/extension/authoring/refinement/prose.ts +79 -0
- package/extension/authoring/refinement/review.ts +111 -0
- package/extension/authoring/refinement/save.ts +119 -0
- package/extension/authoring/review/approvalGate.ts +34 -0
- package/extension/authoring/review/draftContext.ts +68 -0
- package/extension/codeReview/automated.ts +352 -0
- package/extension/codeReview/submission.ts +229 -0
- package/extension/delivery/address.ts +295 -0
- package/extension/delivery/ci.ts +355 -0
- package/extension/delivery/commitCompact.ts +93 -0
- package/extension/delivery/conflictResolution.ts +247 -0
- package/extension/delivery/ready.ts +193 -0
- package/extension/delivery/stackConflict.ts +361 -0
- package/extension/delivery/stackObjective.ts +16 -0
- package/extension/delivery/stackReconcile.ts +165 -0
- package/extension/delivery/submit.ts +171 -0
- package/extension/index.ts +369 -359
- package/extension/learning/analystWave.ts +324 -0
- package/extension/learning/audit.ts +667 -0
- package/extension/learning/capture.ts +92 -0
- package/extension/learning/containment.ts +104 -0
- package/extension/{waves/dreamWave.ts → learning/dream.ts} +112 -94
- package/extension/learning/dreamAnalysis.ts +435 -0
- package/extension/{waves/dreamReducerWave.ts → learning/dreamReducer.ts} +46 -41
- package/extension/{waves → learning}/dreamReport.ts +35 -31
- package/extension/learning/harvest.ts +491 -0
- package/extension/learning/prose.ts +66 -0
- package/extension/learning/routing.ts +79 -0
- package/extension/pi/v1/bashScanTimeout.ts +64 -0
- package/extension/{doors/prReview.ts → pi/v1/codeReview/automated.ts} +215 -310
- package/extension/{doors/prReviewBrowser.ts → pi/v1/codeReview/browser.ts} +125 -57
- package/extension/{doors/hunkHandoff.ts → pi/v1/codeReview/checkout.ts} +12 -8
- package/extension/{doors/reviewWaveTools.ts → pi/v1/codeReview/reviewWave.ts} +169 -116
- package/extension/pi/v1/codeReview/stack.ts +606 -0
- package/extension/pi/v1/codeReview/submit.ts +354 -0
- package/extension/{doors/prReviewTerminal.ts → pi/v1/codeReview/terminal.ts} +32 -27
- package/extension/pi/v1/contextEvidence.ts +80 -0
- package/extension/pi/v1/contextInjection.ts +207 -0
- package/extension/{doors → pi/v1/delivery}/address.ts +163 -265
- package/extension/pi/v1/delivery/ci.ts +570 -0
- package/extension/pi/v1/delivery/commitCompact.ts +201 -0
- package/extension/pi/v1/delivery/conflictResolverEngine.ts +425 -0
- package/extension/{doors → pi/v1/delivery}/land.ts +128 -60
- package/extension/pi/v1/delivery/ready.ts +322 -0
- package/extension/pi/v1/delivery/stackConflictResolver.ts +172 -0
- package/extension/pi/v1/delivery/stackDrive.ts +120 -0
- package/extension/pi/v1/delivery/stackLand.ts +223 -0
- package/extension/pi/v1/delivery/stackRecover.ts +265 -0
- package/extension/pi/v1/delivery/stackStatus.ts +237 -0
- package/extension/pi/v1/delivery/stackSync.ts +658 -0
- package/extension/pi/v1/delivery/submit.ts +389 -0
- package/extension/pi/v1/delivery/submitConflict.ts +186 -0
- package/extension/pi/v1/draftReview.ts +431 -0
- package/extension/{doors → pi/v1}/draftReviewWaveTools.ts +141 -151
- package/extension/pi/v1/gist.ts +794 -0
- package/extension/pi/v1/learning/audit.ts +186 -0
- package/extension/pi/v1/learning/dream.ts +207 -0
- package/extension/{doors/learnFactory.ts → pi/v1/learning/factory.ts} +18 -65
- package/extension/{doors/harvestWaveTools.ts → pi/v1/learning/harvest.ts} +46 -100
- package/extension/pi/v1/learning/learn.ts +585 -0
- package/extension/{doors → pi/v1}/lifecycleGates.ts +14 -59
- package/extension/{factories → pi/v1}/objective.ts +53 -33
- package/extension/pi/v1/objectiveAuthoring.ts +672 -0
- package/extension/pi/v1/objectiveDreamGate.ts +160 -0
- package/extension/pi/v1/objectivePlanning.ts +776 -0
- package/extension/pi/v1/objectiveRefinement.ts +1320 -0
- package/extension/pi/v1/objectiveReview.ts +451 -0
- package/extension/{doors → pi/v1}/objectiveReviewBrowser.ts +259 -172
- package/extension/pi/v1/plan.ts +812 -0
- package/extension/pi/v1/planReview.ts +820 -0
- package/extension/{doors → pi/v1}/planReviewBrowser.ts +228 -152
- package/extension/{doors/annotationPush.ts → pi/v1/providers/annotations.ts} +158 -89
- package/extension/pi/v1/providers/plannotator.ts +487 -0
- package/extension/{doors → pi/v1/providers}/plannotatorHandoff.ts +152 -34
- package/extension/pi/v1/providers/selection.ts +43 -0
- package/extension/{adapters/planAdapterTombell.ts → pi/v1/providers/tombell.ts} +43 -72
- package/extension/pi/v1/review.ts +538 -0
- package/extension/pi/v1/reviewOutcome.ts +9 -0
- package/extension/pi/v1/scoutWave.ts +318 -0
- package/extension/{doors → pi/v1}/selfcheck.ts +4 -4
- package/extension/session/branchWorkflowSession.ts +60 -0
- package/extension/session/lifecycle.ts +644 -0
- package/extension/session/lifecycleGates.ts +64 -0
- package/extension/session/saveDestination.ts +87 -0
- package/extension/session/workflowSession.ts +971 -0
- package/extension/substrate/agentScratch.ts +27 -54
- package/extension/substrate/bashScanTimeout.ts +181 -0
- package/extension/substrate/bindingDelivery.ts +38 -30
- package/extension/substrate/bindings.ts +4 -5
- package/extension/substrate/cache.ts +64 -12
- package/extension/substrate/childRestrictions.ts +39 -0
- package/extension/substrate/coldDoor.ts +17 -1
- package/extension/substrate/config.ts +157 -19
- package/extension/substrate/git.ts +88 -6
- package/extension/substrate/modelVisible.ts +53 -0
- package/extension/substrate/paths.ts +2 -7
- package/extension/substrate/prompts.ts +22 -0
- package/extension/substrate/registry.ts +2 -0
- package/extension/substrate/resolverLease.ts +364 -0
- package/extension/substrate/sessionData.ts +85 -152
- package/extension/substrate/toolGating.ts +279 -84
- package/extension/substrate/unifiedDiff.ts +1 -1
- package/extension/substrate/workflowState.ts +191 -166
- package/extension/substrate/worktreeResolverLock.ts +261 -0
- package/extension/surfaces/surfaces.ts +79 -27
- package/extension/waves/adversarialReviewWave.ts +103 -48
- package/extension/waves/blockedReports.ts +59 -0
- package/extension/waves/draftReviewWave.ts +42 -42
- package/extension/waves/laneIdentity.ts +77 -0
- package/extension/waves/objectiveExplorerWave.ts +24 -24
- package/extension/waves/prReviewWave.ts +89 -77
- package/extension/waves/reportWave.ts +438 -578
- package/extension/waves/reviewClassifierWave.ts +22 -22
- package/extension/waves/rpcAdapter.ts +100 -15
- package/extension/waves/scoutWave.ts +192 -0
- package/extension/waves/transport.ts +480 -0
- package/extension/worker/sdkAdapter.ts +494 -0
- package/extension/worker/stageExecution.ts +679 -0
- package/extension/workerMain.ts +18 -19
- package/package.json +6 -4
- package/prompts/_fixtures/live.yaml +98 -10
- package/prompts/contexts/adapters/plannotator-gist.md +6 -0
- package/prompts/contexts/adapters/plannotator-objective.md +6 -0
- package/prompts/contexts/adapters/plannotator-plan.md +8 -1
- package/prompts/contexts/adapters/plannotator-refinement.md +22 -0
- package/prompts/contexts/adapters/tombell-plan.md +4 -0
- package/prompts/contexts/objective-refinement.md +17 -0
- package/prompts/contexts/plan-authoring.md +6 -5
- package/prompts/contexts/read-only.md +1 -1
- package/prompts/stages/conflict-resolution-continuation.md +9 -0
- package/prompts/stages/conflict-resolution.md +4 -4
- package/prompts/stages/objective-author/adopt.md +1 -1
- package/prompts/stages/objective-author/file.md +1 -1
- package/prompts/stages/objective-author/seed.md +1 -1
- package/prompts/stages/objective-plan/guidance.md +2 -2
- package/prompts/stages/objective-plan/seed.md +9 -1
- package/prompts/stages/objective-reconcile-ready.md +7 -0
- package/prompts/stages/objective-reconcile.md +1 -1
- package/prompts/stages/objective-refine/seed.md +18 -0
- package/prompts/stages/objective-review-browser.md +4 -4
- package/prompts/stages/objective-sync.md +1 -1
- package/prompts/stages/plan-review-browser.md +4 -4
- package/prompts/stages/pr-review-browser/active.md +3 -4
- package/prompts/stages/pr-review-browser/foreign.md +3 -4
- package/prompts/stages/pr-review-terminal/active.md +3 -3
- package/prompts/stages/pr-review-terminal/foreign.md +3 -3
- package/prompts/stages/pr-review.md +3 -3
- package/prompts/stages/stack-review/cold.md +1 -0
- package/prompts/stages/stack-review-browser/stack.md +22 -0
- package/shared/README.md +8 -3
- package/shared/bindings.yaml +6 -3
- package/shared/contracts.md +4499 -2147
- package/shared/fixtures/issues-table.json +130 -0
- package/shared/registry.yaml +29 -1
- package/shared/schemas/outputs/objective-node-engagement.schema.json +318 -0
- package/shared/schemas/outputs/objective-stack-status.schema.json +178 -2
- package/shared/schemas/outputs/pr-ready.schema.json +110 -2
- package/shared/schemas/outputs/pr-review-context.schema.json +54 -9
- package/shared/schemas/outputs/pr-review-stack-context.schema.json +196 -0
- package/extension/adapters/planAdapterPlannotator.ts +0 -362
- package/extension/doors/auditWaveTools.ts +0 -352
- package/extension/doors/ciExecutor.ts +0 -756
- package/extension/doors/commitCompact.ts +0 -251
- package/extension/doors/dreamWaveTools.ts +0 -475
- package/extension/doors/learn.ts +0 -655
- package/extension/doors/objectiveStack.ts +0 -1143
- package/extension/doors/prReviewDynamic.ts +0 -276
- package/extension/doors/ready.ts +0 -87
- package/extension/doors/submit.ts +0 -347
- package/extension/doors/submitPrReview.ts +0 -408
- package/extension/factories/gistAuthor.ts +0 -94
- package/extension/factories/gistDraft.ts +0 -265
- package/extension/factories/gistSave.ts +0 -251
- package/extension/factories/implementHere.ts +0 -116
- package/extension/factories/objectiveAuthor.ts +0 -98
- package/extension/factories/objectiveDraft.ts +0 -466
- package/extension/factories/objectivePlan.ts +0 -975
- package/extension/factories/objectiveSave.ts +0 -363
- package/extension/factories/planDraft.ts +0 -140
- package/extension/factories/planMode.ts +0 -205
- package/extension/factories/planReview.ts +0 -1237
- package/extension/factories/planSave.ts +0 -604
- package/extension/factories/planTitle.ts +0 -141
- package/extension/substrate/structuredOutput.ts +0 -202
- package/extension/waves/auditWave.ts +0 -312
- package/extension/waves/harvestWave.ts +0 -399
- package/extension/waves/learnWave.ts +0 -155
- package/extension/waves/memoryAdapter.ts +0 -139
- package/extension/waves/prReviewDynamicWave.ts +0 -777
- package/extension/worker/readOnlySession.ts +0 -294
- package/extension/worker/worker.ts +0 -899
- package/prompts/stages/pr-review-dynamic.md +0 -7
- package/shared/contracts-history.md +0 -605
|
@@ -9,11 +9,6 @@
|
|
|
9
9
|
// no tool registration, no `ExtensionAPI` — imports only the two dream siblings plus nothing
|
|
10
10
|
// else. The input is untrusted DATA, never instructions.
|
|
11
11
|
|
|
12
|
-
import {
|
|
13
|
-
DREAM_REDUCER_ANGLES,
|
|
14
|
-
type DreamReducerAnalysis,
|
|
15
|
-
type DreamReducerAngle,
|
|
16
|
-
} from "./dreamReducerWave.ts";
|
|
17
12
|
import {
|
|
18
13
|
codePointLength,
|
|
19
14
|
DREAM_DISPOSITIONS,
|
|
@@ -21,14 +16,19 @@ import {
|
|
|
21
16
|
type DreamDocAssessment,
|
|
22
17
|
type DreamLaneAnalysis,
|
|
23
18
|
type DreamManifest,
|
|
24
|
-
} from "./
|
|
19
|
+
} from "./dream.ts";
|
|
20
|
+
import {
|
|
21
|
+
DREAM_REDUCER_ANGLES,
|
|
22
|
+
type DreamReducerAnalysis,
|
|
23
|
+
type DreamReducerAngle,
|
|
24
|
+
} from "./dreamReducer.ts";
|
|
25
25
|
|
|
26
26
|
/** The dream report's own schema version line (independent of the manifest's). */
|
|
27
|
-
|
|
27
|
+
const DREAM_REPORT_SCHEMA_VERSION = "1";
|
|
28
28
|
|
|
29
29
|
/** The cap on DISTINCT `roadmap_node` values across the selected units — the ≤12-node
|
|
30
30
|
* selection cap checked at review time (many-to-one unit→node mapping is allowed). */
|
|
31
|
-
|
|
31
|
+
const DREAM_REPORT_MAX_ROADMAP_NODES = 12;
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* The per-part cap on the rendered report, measured in Unicode CODE POINTS (matching Python's
|
|
@@ -36,13 +36,13 @@ export const DREAM_REPORT_MAX_ROADMAP_NODES = 12;
|
|
|
36
36
|
* comment limit with margin for the persistence-side storage markers (the renderer never emits
|
|
37
37
|
* marker HTML).
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
const DREAM_REPORT_PART_MAX_CHARS = 60_000;
|
|
40
40
|
|
|
41
41
|
/** The fixed per-part packing allowance for the part header line. */
|
|
42
|
-
|
|
42
|
+
const DREAM_REPORT_PART_HEADER_RESERVE = 200;
|
|
43
43
|
|
|
44
44
|
/** The bounded semantic-detail collection cap: overflow appends ONE synthetic count detail. */
|
|
45
|
-
|
|
45
|
+
const DREAM_REPORT_MAX_VALIDATION_DETAILS = 25;
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* The SSOT for EVERY capped model-supplied field: the input schema's `maxItems`/`maxLength`
|
|
@@ -52,7 +52,7 @@ export const DREAM_REPORT_MAX_VALIDATION_DETAILS = 25;
|
|
|
52
52
|
* the real gates are the validator's exact path-set equality, the ≤12-distinct-node cap, and
|
|
53
53
|
* the exact unit partition.
|
|
54
54
|
*/
|
|
55
|
-
|
|
55
|
+
const DREAM_REPORT_CAPS = {
|
|
56
56
|
rows: 512,
|
|
57
57
|
rowRationaleChars: 300,
|
|
58
58
|
fallbackReasonChars: 300,
|
|
@@ -75,7 +75,7 @@ export const DREAM_REPORT_CAPS = {
|
|
|
75
75
|
// ------------------------------------------------------------------ the model-facing input
|
|
76
76
|
|
|
77
77
|
/** One final per-doc disposition row (model-supplied). */
|
|
78
|
-
|
|
78
|
+
interface DreamReportInputRow {
|
|
79
79
|
path: string;
|
|
80
80
|
disposition: DreamDisposition;
|
|
81
81
|
merge_target: string | null;
|
|
@@ -85,7 +85,7 @@ export interface DreamReportInputRow {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
/** One selected curation unit (rank = input position; several units MAY share a node). */
|
|
88
|
-
|
|
88
|
+
interface DreamReportSelectedUnit {
|
|
89
89
|
title: string;
|
|
90
90
|
roadmap_node: string;
|
|
91
91
|
docs: string[];
|
|
@@ -93,14 +93,14 @@ export interface DreamReportSelectedUnit {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
/** One overflow curation unit (rank = input position; carries no roadmap node). */
|
|
96
|
-
|
|
96
|
+
interface DreamReportOverflowUnit {
|
|
97
97
|
title: string;
|
|
98
98
|
docs: string[];
|
|
99
99
|
rationale: string;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
/** One harvest follow-up citing a SURVIVING destination (a keep/revise doc or its cluster). */
|
|
103
|
-
|
|
103
|
+
interface DreamReportFollowup {
|
|
104
104
|
title: string;
|
|
105
105
|
destination: string;
|
|
106
106
|
pointer: string;
|
|
@@ -108,14 +108,14 @@ export interface DreamReportFollowup {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
/** The model-supplied prediction — TYPE sanity only, deliberately no directional/quota rule. */
|
|
111
|
-
|
|
111
|
+
interface DreamReportPredictedEffectsInput {
|
|
112
112
|
docs_after: number;
|
|
113
113
|
bytes_after: number;
|
|
114
114
|
note: string | null;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
/** The untrusted, model-supplied input: ONLY the decisions the design assigns to the parent. */
|
|
118
|
-
|
|
118
|
+
interface DreamReportInput {
|
|
119
119
|
rows: DreamReportInputRow[];
|
|
120
120
|
uncertainties: string[];
|
|
121
121
|
selected_units: DreamReportSelectedUnit[];
|
|
@@ -249,7 +249,7 @@ export const DREAM_REPORT_INPUT_SCHEMA = {
|
|
|
249
249
|
// ------------------------------------------------------------------- the composed report
|
|
250
250
|
|
|
251
251
|
/** One injected reducer stance record, joined onto its doc's row (angle order). */
|
|
252
|
-
|
|
252
|
+
interface DreamReportStanceRecord {
|
|
253
253
|
angle: DreamReducerAngle;
|
|
254
254
|
stance: "endorse" | "challenge";
|
|
255
255
|
reason: string;
|
|
@@ -258,7 +258,7 @@ export interface DreamReportStanceRecord {
|
|
|
258
258
|
|
|
259
259
|
/** One composed per-doc row: the model's final decision joined with the injected analyst
|
|
260
260
|
* evidence and reducer stances (manifest lane/doc order). */
|
|
261
|
-
|
|
261
|
+
interface DreamReportRow {
|
|
262
262
|
path: string;
|
|
263
263
|
lane: string;
|
|
264
264
|
cluster: string | null;
|
|
@@ -276,7 +276,7 @@ export interface DreamReportRow {
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
/** One analyst lane's coverage line (complete by construction — rendered for verification). */
|
|
279
|
-
|
|
279
|
+
interface DreamReportAnalystCoverage {
|
|
280
280
|
lane: string;
|
|
281
281
|
docs: number;
|
|
282
282
|
overlap_signals_omitted: number;
|
|
@@ -285,7 +285,7 @@ export interface DreamReportAnalystCoverage {
|
|
|
285
285
|
}
|
|
286
286
|
|
|
287
287
|
/** One reducer angle's coverage line. */
|
|
288
|
-
|
|
288
|
+
interface DreamReportReducerCoverage {
|
|
289
289
|
angle: DreamReducerAngle;
|
|
290
290
|
stances: number;
|
|
291
291
|
stances_omitted: number;
|
|
@@ -736,8 +736,10 @@ interface JoinedRow {
|
|
|
736
736
|
* the semantic rules collect up to `DREAM_REPORT_MAX_VALIDATION_DETAILS` named details in
|
|
737
737
|
* deterministic order (validation phase order, then manifest doc order within a phase),
|
|
738
738
|
* overflow appending one final synthetic detail counting the omitted violations.
|
|
739
|
+
* Module-private: `buildDreamReport` is the one entry — the whole matrix is exercised
|
|
740
|
+
* through it.
|
|
739
741
|
*/
|
|
740
|
-
|
|
742
|
+
function validateDreamReport(
|
|
741
743
|
input: unknown,
|
|
742
744
|
context: DreamReportContext,
|
|
743
745
|
): { ok: true; report: DreamReport } | Refusal {
|
|
@@ -759,7 +761,7 @@ export function validateDreamReport(
|
|
|
759
761
|
|
|
760
762
|
const details: string[] = [];
|
|
761
763
|
|
|
762
|
-
// Phase 1
|
|
764
|
+
// Phase 1 — exact path-set equality: no duplicate, no extra, no missing rows.
|
|
763
765
|
const rowByPath = new Map<string, DreamReportInputRow>();
|
|
764
766
|
for (const row of typed.rows) {
|
|
765
767
|
if (rowByPath.has(row.path)) {
|
|
@@ -778,7 +780,7 @@ export function validateDreamReport(
|
|
|
778
780
|
}
|
|
779
781
|
}
|
|
780
782
|
|
|
781
|
-
// Phase 2
|
|
783
|
+
// Phase 2 — per-row rules in manifest doc order: rationale non-empty, the
|
|
782
784
|
// merge-target shape, downgrade-only against the analyst proposal, the fallback rule.
|
|
783
785
|
const joined = new Map<string, JoinedRow>();
|
|
784
786
|
for (const path of manifestPaths) {
|
|
@@ -847,7 +849,7 @@ export function validateDreamReport(
|
|
|
847
849
|
}
|
|
848
850
|
}
|
|
849
851
|
|
|
850
|
-
// Phase 3
|
|
852
|
+
// Phase 3 — the destructive evidence bar, computed ONLY from context stances: an
|
|
851
853
|
// explicit endorse from BOTH gate angles and no challenge from ANY angle; silence counts as
|
|
852
854
|
// non-endorsement. The bar is necessary, not sufficient — an eligible proposal MAY still be
|
|
853
855
|
// downgraded by parent judgment.
|
|
@@ -886,7 +888,7 @@ export function validateDreamReport(
|
|
|
886
888
|
}
|
|
887
889
|
}
|
|
888
890
|
|
|
889
|
-
// Phase 4
|
|
891
|
+
// Phase 4 — merge-target existence + survival over FINAL dispositions. Survival
|
|
890
892
|
// structurally forbids merge chains and cycles (a merge-into doc can never be a target).
|
|
891
893
|
for (const path of manifestPaths) {
|
|
892
894
|
const state = joined.get(path);
|
|
@@ -907,7 +909,7 @@ export function validateDreamReport(
|
|
|
907
909
|
}
|
|
908
910
|
}
|
|
909
911
|
|
|
910
|
-
// Phase 5
|
|
912
|
+
// Phase 5 — curation units: corpus membership, no doc in two units, no empty unit, no
|
|
911
913
|
// final-keep doc in a unit, the exact partition over the final non-keep set, non-empty
|
|
912
914
|
// roadmap nodes, and the ≤12-distinct-node cap (many-to-one node mapping is allowed).
|
|
913
915
|
const claimedBy = new Set<string>();
|
|
@@ -969,7 +971,7 @@ export function validateDreamReport(
|
|
|
969
971
|
);
|
|
970
972
|
}
|
|
971
973
|
|
|
972
|
-
// Phase 6
|
|
974
|
+
// Phase 6 — harvest follow-ups cite SURVIVING destinations: a keep/revise corpus doc,
|
|
973
975
|
// or a cluster named by at least one keep/revise doc.
|
|
974
976
|
const survivingDocs = new Set<string>();
|
|
975
977
|
for (const path of manifestPaths) {
|
|
@@ -1016,7 +1018,7 @@ export function validateDreamReport(
|
|
|
1016
1018
|
}
|
|
1017
1019
|
}
|
|
1018
1020
|
|
|
1019
|
-
// Phase 7
|
|
1021
|
+
// Phase 7 — predicted effects carry deliberately NO directional/quota rule: a growth
|
|
1020
1022
|
// prediction is valid (type sanity was structural).
|
|
1021
1023
|
|
|
1022
1024
|
if (details.length > 0) {
|
|
@@ -1176,8 +1178,10 @@ function joinOrDash(items: string[]): string {
|
|
|
1176
1178
|
* every part prefixed with its header after packing. A single block exceeding the budget is a
|
|
1177
1179
|
* defensive refusal (structurally unreachable under the caps arithmetic — named, never
|
|
1178
1180
|
* truncated).
|
|
1181
|
+
* Module-private: `buildDreamReport` is the one entry (it returns both the typed report and
|
|
1182
|
+
* the rendered parts).
|
|
1179
1183
|
*/
|
|
1180
|
-
|
|
1184
|
+
function renderDreamReport(
|
|
1181
1185
|
report: DreamReport,
|
|
1182
1186
|
): { ok: true; parts: string[] } | { ok: false; detail: string } {
|
|
1183
1187
|
const blocks: RenderBlock[] = [];
|