@sentropic/track 0.11.1 → 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cli/index.d.ts.map +1 -1
  2. package/dist/cli/index.js +41 -1
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/events/types.d.ts +1 -1
  5. package/dist/events/types.d.ts.map +1 -1
  6. package/dist/events/types.js +6 -0
  7. package/dist/events/types.js.map +1 -1
  8. package/dist/ingest/contract.d.ts +2 -2
  9. package/dist/ingest/contract.d.ts.map +1 -1
  10. package/dist/ingest/contract.js +20 -0
  11. package/dist/ingest/contract.js.map +1 -1
  12. package/dist/ingest/ingest.d.ts.map +1 -1
  13. package/dist/ingest/ingest.js +10 -0
  14. package/dist/ingest/ingest.js.map +1 -1
  15. package/dist/ingest/map.d.ts.map +1 -1
  16. package/dist/ingest/map.js +10 -0
  17. package/dist/ingest/map.js.map +1 -1
  18. package/dist/mcp/server.d.ts +45 -0
  19. package/dist/mcp/server.d.ts.map +1 -1
  20. package/dist/mcp/server.js +41 -0
  21. package/dist/mcp/server.js.map +1 -1
  22. package/dist/model/index.d.ts +1 -0
  23. package/dist/model/index.d.ts.map +1 -1
  24. package/dist/model/index.js +2 -0
  25. package/dist/model/index.js.map +1 -1
  26. package/dist/model/spec-amend.d.ts +59 -0
  27. package/dist/model/spec-amend.d.ts.map +1 -0
  28. package/dist/model/spec-amend.js +56 -0
  29. package/dist/model/spec-amend.js.map +1 -0
  30. package/dist/read/contract.d.ts +114 -3
  31. package/dist/read/contract.d.ts.map +1 -1
  32. package/dist/read/contract.js +175 -1
  33. package/dist/read/contract.js.map +1 -1
  34. package/dist/read/index.d.ts +1 -1
  35. package/dist/read/index.d.ts.map +1 -1
  36. package/dist/read/index.js.map +1 -1
  37. package/dist/state/fold.d.ts +8 -0
  38. package/dist/state/fold.d.ts.map +1 -1
  39. package/dist/state/fold.js +22 -0
  40. package/dist/state/fold.js.map +1 -1
  41. package/dist/state/snapshot.d.ts +2 -0
  42. package/dist/state/snapshot.d.ts.map +1 -1
  43. package/dist/state/snapshot.js +2 -0
  44. package/dist/state/snapshot.js.map +1 -1
  45. package/dist/track.d.ts +14 -0
  46. package/dist/track.d.ts.map +1 -1
  47. package/dist/track.js +23 -0
  48. package/dist/track.js.map +1 -1
  49. package/package.json +1 -1
@@ -116,6 +116,34 @@ export const READ_TOOLS = [
116
116
  required: ['workspace', 'baselineCommit'],
117
117
  },
118
118
  },
119
+ {
120
+ name: 'track_cursor',
121
+ description: 'M5 (canevas) — a cheap change cursor over the log tail, as JSON {head, count}. `head` = the log-tail event contentHash (null when empty); `count` = the event count. O(tail). The host\'s liveness primitive: poll this, re-read track_canevas / track_amendment_trace when it moves. Read-only.',
122
+ inputSchema: { type: 'object', properties: {} },
123
+ },
124
+ {
125
+ name: 'track_canevas',
126
+ description: 'M5 (canevas) — the materialized canevas for ONE workspace, as JSON {workspace, report, prov, affordances, dossier?}. report = the bucketed report + WP rollup forest (workspace-scoped); prov = per-aggregate latest-write provenance lineage {origin:human|machine, …}; affordances = per-aggregate legal next WorkEvent kinds (open-action affordances). With `decisionId`, also includes the full decision dossier. PURE (no clock, no socket — the host owns liveness).',
127
+ inputSchema: {
128
+ type: 'object',
129
+ properties: {
130
+ workspace: { type: 'string', description: 'The workspace to materialize the canevas for.' },
131
+ baselineCommit: { type: 'string', description: 'Commit AWAITED/acceptance are evaluated against.' },
132
+ requireAccepted: { type: 'boolean', description: 'A done leaf counts as DONE only if acceptance=pass.' },
133
+ decisionId: { type: 'string', description: 'Optional decision id — includes its full dossier (context/options/qa/outcome/artifacts).' },
134
+ },
135
+ required: ['workspace', 'baselineCommit'],
136
+ },
137
+ },
138
+ {
139
+ name: 'track_amendment_trace',
140
+ description: 'M5 (canevas) — the human/machine diff for ONE aggregate, as JSON [{seq, at, by, kind, prov, origin, summary?, patchRef?, proposalRef?}]. An ordered (by seq), prov-tagged projection over the aggregate\'s spec.amended / dossier.revised / decision.artifact-added / decision.outcome events. `origin` derives PURELY from prov.proposed (true=machine, false=human). An AI proposal + a human acceptance both appear — the machine origin is never laundered. PURE replay.',
141
+ inputSchema: {
142
+ type: 'object',
143
+ properties: { aggregateId: { type: 'string', description: 'The item/decision aggregate id to trace.' } },
144
+ required: ['aggregateId'],
145
+ },
146
+ },
119
147
  {
120
148
  name: 'track_workspace_activity',
121
149
  description: 'Poll-able activity signal for ONE workspace (h2a conductor-launch gating), as JSON {workspace, pending, stalled[], latestEventAt?}. PURE: the caller supplies `now` (and optional `idleMs`, default 24h) — track holds no clock. `pending` = TO-DO+AWAITED count; `stalled` = items/decisions durably stuck (awaited-open-blocker | pending-decision | in-progress-idle | todo-idle).',
@@ -231,6 +259,19 @@ export function dispatchReadTool(reader, name, args) {
231
259
  ...(inferDeliveredOutOfScope !== undefined ? { inferDeliveredOutOfScope } : {}),
232
260
  }), null, 2);
233
261
  }
262
+ case 'track_cursor':
263
+ return JSON.stringify(reader.cursor(), null, 2);
264
+ case 'track_canevas': {
265
+ const requireAccepted = optBool(args, 'requireAccepted');
266
+ const decisionId = optStr(args, 'decisionId');
267
+ return JSON.stringify(reader.canevas(reqStr(args, 'workspace'), {
268
+ baselineCommit: reqStr(args, 'baselineCommit'),
269
+ ...(requireAccepted !== undefined ? { requireAccepted } : {}),
270
+ ...(decisionId !== undefined ? { decisionId } : {}),
271
+ }), null, 2);
272
+ }
273
+ case 'track_amendment_trace':
274
+ return JSON.stringify(reader.amendmentTrace(reqStr(args, 'aggregateId')), null, 2);
234
275
  case 'track_validate':
235
276
  return JSON.stringify(reader.validate(), null, 2);
236
277
  case 'track_external_deps':
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,5 @@ export { assertDossierArtifact, assertOutcomeTransition, isSettled, type AddArti
4
4
  export { type AcceptanceStatus, type CriterionState, type CriterionStatus, type EvidenceKind, type EvidenceState, type RunResult, type TestRun, type Waiver, } from './acceptance.js';
5
5
  export { WSJF_SCHEME_VERSION, wsjfScore, type PriorityAssessment, type SchemeId, type WsjfInputs, } from './priority.js';
6
6
  export { assertVerificationRun, VERDICTS, type VerificationRecordedPayload, type VerificationRun, type Verdict, } from './verification.js';
7
+ export { assertSpecAmend, type JsonPatch, type JsonPatchOp, type SpecAmendment, type SpecAmendPayload, } from './spec-amend.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,OAAO,EACZ,KAAK,OAAO,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,MAAM,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,OAAO,GACb,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,OAAO,EACZ,KAAK,OAAO,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,MAAM,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,OAAO,GACb,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,eAAe,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAA"}
@@ -6,4 +6,6 @@ export {} from './acceptance.js';
6
6
  export { WSJF_SCHEME_VERSION, wsjfScore, } from './priority.js';
7
7
  // Scope §B(c) — path-scope verification evidence (the sibling of TestRun).
8
8
  export { assertVerificationRun, VERDICTS, } from './verification.js';
9
+ // M5 (canevas) — the live spec-amendment write kind (item.spec-amend → spec.amended).
10
+ export { assertSpecAmend, } from './spec-amend.js';
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,eAAe,GAchB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,mBAAmB,GAMpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,GAWV,MAAM,eAAe,CAAA;AACtB,OAAO,EASN,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,mBAAmB,EACnB,SAAS,GAIV,MAAM,eAAe,CAAA;AACtB,2EAA2E;AAC3E,OAAO,EACL,qBAAqB,EACrB,QAAQ,GAIT,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,eAAe,GAchB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,mBAAmB,GAMpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,GAWV,MAAM,eAAe,CAAA;AACtB,OAAO,EASN,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,mBAAmB,EACnB,SAAS,GAIV,MAAM,eAAe,CAAA;AACtB,2EAA2E;AAC3E,OAAO,EACL,qBAAqB,EACrB,QAAQ,GAIT,MAAM,mBAAmB,CAAA;AAC1B,sFAAsF;AACtF,OAAO,EACL,eAAe,GAKhB,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { type ItemId } from './item.js';
2
+ /**
3
+ * An RFC-6902-shaped JSON Patch, recorded VERBATIM. track does NOT apply it, does NOT validate `op`
4
+ * against the document, and does NOT recompute `baseHash`→`resultHash`. It is an opaque, hash-covered
5
+ * payload member: a tampered patch changes the recorded amendment, which is exactly the audit value.
6
+ */
7
+ export interface JsonPatchOp {
8
+ op: 'add' | 'remove' | 'replace' | 'move' | 'copy' | 'test';
9
+ path: string;
10
+ value?: unknown;
11
+ from?: string;
12
+ }
13
+ export type JsonPatch = JsonPatchOp[];
14
+ /** The `item.spec-amend` payload / `spec.amended` event payload (M5 canevas §3). */
15
+ export interface SpecAmendPayload {
16
+ itemId: ItemId;
17
+ /** The decision dossier this amendment was negotiated under (optional). */
18
+ decisionId?: ItemId;
19
+ /** A pointer to the host LiveDocument the patch targets (optional). */
20
+ liveDocRef?: string;
21
+ /** Opaque hash of the spec document BEFORE the patch (integrity tag; never recomputed). */
22
+ baseHash: string;
23
+ /** The JsonPatch, recorded verbatim (track never applies it). */
24
+ patch: JsonPatch;
25
+ /** Opaque hash of the spec document AFTER the patch (integrity tag; never recomputed). */
26
+ resultHash: string;
27
+ /**
28
+ * A reference to an AI proposal this amendment accepts/derives from. When a human/signed amend carries
29
+ * a `proposalRef`, it records ACCEPTANCE of that proposal WITHOUT laundering the machine origin: BOTH
30
+ * the machine-proposed amend (prov.proposed:true) and the human acceptance stay in the trace.
31
+ */
32
+ proposalRef?: string;
33
+ summary?: string;
34
+ }
35
+ /**
36
+ * One materialized amendment in `state.specAmendments[itemId]` — record-only, in stream order. `at`/`by`
37
+ * come from the event frame (not the payload). The full prov-tagged ordering is reconstructed by the read
38
+ * surface (`TrackReader.amendmentTrace`) directly over the log; this projection is the per-item record.
39
+ */
40
+ export interface SpecAmendment {
41
+ itemId: ItemId;
42
+ baseHash: string;
43
+ patch: JsonPatch;
44
+ resultHash: string;
45
+ at: string;
46
+ decisionId?: ItemId;
47
+ liveDocRef?: string;
48
+ proposalRef?: string;
49
+ summary?: string;
50
+ }
51
+ /**
52
+ * Fail-closed validation + normalization of a `SpecAmendPayload` (mirrors `assertVerificationRun`/
53
+ * `assertScopeDecl`). Requires `itemId`/`baseHash`/`resultHash`/`patch`; the patch must be an array of
54
+ * `{op:string, path:string, …}` objects (shape only — track NEVER interprets the patch). Drops absent
55
+ * optionals so the recorded shape is minimal + hash-stable. The `itemId` legality (exists, is an item)
56
+ * is checked by the facade against folded state; this is the pure shape gate.
57
+ */
58
+ export declare function assertSpecAmend(input: unknown): SpecAmendPayload;
59
+ //# sourceMappingURL=spec-amend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-amend.d.ts","sourceRoot":"","sources":["../../src/model/spec-amend.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAEpD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IAC3D,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AACD,MAAM,MAAM,SAAS,GAAG,WAAW,EAAE,CAAA;AAErC,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,CAAA;IAChB,iEAAiE;IACjE,KAAK,EAAE,SAAS,CAAA;IAChB,0FAA0F;IAC1F,UAAU,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAID;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAiChE"}
@@ -0,0 +1,56 @@
1
+ // M5 (canevas) — `item.spec-amend` → `spec.amended`: a net-new, owner-approved, ADDITIVE write kind
2
+ // for LIVE spec amendment with a human/machine diff trace. It is the concurrent-safe live-amendment
3
+ // primitive (the coarse `decision.dossier` whole-rewrite is a lost-update hazard; this is a per-patch,
4
+ // append-only record). RECORD-ONLY: track records the JsonPatch VERBATIM and NEVER applies/validates the
5
+ // patch semantics — `baseHash`/`resultHash` are OPAQUE integrity tags (the spec document lives in the
6
+ // host's LiveDocument). The amendment TRACE is the value; track destroys no spec field.
7
+ import { DomainError } from './item.js';
8
+ const nonEmptyString = (v) => typeof v === 'string' && v.length > 0;
9
+ /**
10
+ * Fail-closed validation + normalization of a `SpecAmendPayload` (mirrors `assertVerificationRun`/
11
+ * `assertScopeDecl`). Requires `itemId`/`baseHash`/`resultHash`/`patch`; the patch must be an array of
12
+ * `{op:string, path:string, …}` objects (shape only — track NEVER interprets the patch). Drops absent
13
+ * optionals so the recorded shape is minimal + hash-stable. The `itemId` legality (exists, is an item)
14
+ * is checked by the facade against folded state; this is the pure shape gate.
15
+ */
16
+ export function assertSpecAmend(input) {
17
+ if (typeof input !== 'object' || input === null || Array.isArray(input)) {
18
+ throw new DomainError('item.spec-amend: an amendment must be an object');
19
+ }
20
+ const a = input;
21
+ if (!nonEmptyString(a['itemId']))
22
+ throw new DomainError('item.spec-amend: requires an itemId');
23
+ if (!nonEmptyString(a['baseHash']))
24
+ throw new DomainError('item.spec-amend: requires a baseHash');
25
+ if (!nonEmptyString(a['resultHash']))
26
+ throw new DomainError('item.spec-amend: requires a resultHash');
27
+ if (!Array.isArray(a['patch']))
28
+ throw new DomainError('item.spec-amend: patch must be a JsonPatch array');
29
+ const patch = a['patch'].map((op, i) => {
30
+ if (typeof op !== 'object' || op === null || Array.isArray(op)) {
31
+ throw new DomainError(`item.spec-amend: patch[${i}] must be an object`);
32
+ }
33
+ const o = op;
34
+ if (!nonEmptyString(o['op']))
35
+ throw new DomainError(`item.spec-amend: patch[${i}].op is required`);
36
+ if (typeof o['path'] !== 'string')
37
+ throw new DomainError(`item.spec-amend: patch[${i}].path must be a string`);
38
+ return o; // recorded VERBATIM (track never interprets the op)
39
+ });
40
+ for (const key of ['decisionId', 'liveDocRef', 'proposalRef', 'summary']) {
41
+ if (a[key] !== undefined && typeof a[key] !== 'string') {
42
+ throw new DomainError(`item.spec-amend: ${key} must be a string`);
43
+ }
44
+ }
45
+ return {
46
+ itemId: a['itemId'],
47
+ baseHash: a['baseHash'],
48
+ patch,
49
+ resultHash: a['resultHash'],
50
+ ...(a['decisionId'] !== undefined ? { decisionId: a['decisionId'] } : {}),
51
+ ...(a['liveDocRef'] !== undefined ? { liveDocRef: a['liveDocRef'] } : {}),
52
+ ...(a['proposalRef'] !== undefined ? { proposalRef: a['proposalRef'] } : {}),
53
+ ...(a['summary'] !== undefined ? { summary: a['summary'] } : {}),
54
+ };
55
+ }
56
+ //# sourceMappingURL=spec-amend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-amend.js","sourceRoot":"","sources":["../../src/model/spec-amend.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import type { Sha256 } from '../events/types.js';
1
+ import type { ActorId, EventType, Provenance, Sha256 } from '../events/types.js';
2
2
  import { type IntegrityResult } from '../events/validate.js';
3
3
  import { type ItemId } from '../model/item.js';
4
4
  import type { VerificationRun } from '../model/verification.js';
5
5
  import { type StatusGroup, type StatusLevel } from '../report/status-by-level.js';
6
6
  import { type QueryFilter, type Report, type ReportOptions, type ReportRow } from '../report/build.js';
7
+ import type { Dossier, Outcome } from '../model/decision.js';
8
+ import type { WorkEventKind } from '../ingest/contract.js';
7
9
  import { type ScopeValidateInput, type ScopeValidateResult } from './scope-validate.js';
8
10
  /**
9
11
  * Semver of the skill-facing READ contract.
@@ -12,7 +14,7 @@ import { type ScopeValidateInput, type ScopeValidateResult } from './scope-valid
12
14
  * shapes it returns may only GROW (new methods / new optional fields); nothing is removed or
13
15
  * repurposed without a major bump. Consumers gate on `reader.contractVersion`.
14
16
  */
15
- export declare const READ_CONTRACT_VERSION = "1.6.0";
17
+ export declare const READ_CONTRACT_VERSION = "1.7.0";
16
18
  /** Provenance of the last `branch.imported` for a locator (drawn from the raw event log). */
17
19
  export interface BranchProvenance {
18
20
  locator: string;
@@ -90,6 +92,87 @@ export interface WorkspaceActivityOptions {
90
92
  /** Staleness window in ms; default 24h ⇒ "stalled" = DURABLY stuck. */
91
93
  idleMs?: number;
92
94
  }
95
+ /**
96
+ * A cheap change cursor over the log tail — the host's liveness primitive. `head` is the log-tail event's
97
+ * `contentHash` (null on an empty log); `count` is the event count. The host polls this (O(tail)) and
98
+ * re-reads the materialization reads only when it moves. The cursor changes IFF the log grew.
99
+ */
100
+ export interface Cursor {
101
+ head: Sha256 | null;
102
+ count: number;
103
+ }
104
+ /** Result of comparing a held cursor against the live log tail. `changed` ⇒ re-read the materialization. */
105
+ export interface CursorDelta {
106
+ changed: boolean;
107
+ head: Sha256 | null;
108
+ count: number;
109
+ }
110
+ /** Origin of a write, DERIVED PURELY from `prov.proposed` (true ⇒ machine/LLM-proposed; false ⇒ human). */
111
+ export type AmendmentOrigin = 'human' | 'machine';
112
+ /** The prov fields projected onto an amendment-trace step (a read-only summary; never re-verified). */
113
+ export interface AmendmentProv {
114
+ proposed: boolean;
115
+ auth: Provenance['auth'];
116
+ principal?: string;
117
+ }
118
+ /**
119
+ * One ordered, prov-tagged step in an aggregate's amendment trace — the human/machine diff. A PURE replay
120
+ * projection over the aggregate's `spec.amended` / `dossier.revised` / `decision.artifact-added` /
121
+ * `decision.outcome` events: ZERO new event data (`origin` derives from `prov.proposed`). An AI proposal
122
+ * and a human acceptance both appear — the machine origin is NEVER laundered away.
123
+ */
124
+ export interface AmendmentStep {
125
+ seq: number;
126
+ at: string;
127
+ by: ActorId;
128
+ kind: EventType;
129
+ prov: AmendmentProv;
130
+ /** `'machine'` iff `prov.proposed` (an AI proposal); else `'human'`. Derived, not stored. */
131
+ origin: AmendmentOrigin;
132
+ summary?: string;
133
+ /** For a `spec.amended` step: the opaque resultHash of the patch (the integrity tag track records). */
134
+ patchRef?: string;
135
+ /** For a `spec.amended` step: the `proposalRef` it accepts/derives from (proof of non-laundered origin). */
136
+ proposalRef?: string;
137
+ }
138
+ /** A per-aggregate `prov` lineage summary surfaced on the canevas (the latest write's provenance). */
139
+ export interface ProvLineage {
140
+ origin: AmendmentOrigin;
141
+ proposed: boolean;
142
+ auth: Provenance['auth'];
143
+ principal?: string;
144
+ /** The last event `at` on this aggregate (informational). */
145
+ latestAt: string;
146
+ }
147
+ /** The full decision dossier surfaced when `canevas` is called with a `decisionId`. */
148
+ export interface DecisionDossierView {
149
+ id: ItemId;
150
+ title: string;
151
+ workspace: string;
152
+ outcome: Outcome;
153
+ dossier: Dossier;
154
+ }
155
+ /** Options for {@link TrackReader.canevas}. `decisionId` opts the full decision dossier into the view. */
156
+ export interface CanevasOptions {
157
+ baselineCommit: string;
158
+ requireAccepted?: boolean;
159
+ decisionId?: ItemId;
160
+ }
161
+ /**
162
+ * The materialized canevas — the host's render input (report + WP rollup, per-aggregate prov lineage +
163
+ * open-action affordances, and, with `decisionId`, the full decision dossier). PURE: no clock, no socket.
164
+ */
165
+ export interface CanevasView {
166
+ workspace: string;
167
+ /** The materialized report (buckets + decisions + WP rollup forest) for the workspace. */
168
+ report: Report;
169
+ /** Per surfaced aggregate id → its `prov` lineage summary (latest write provenance). */
170
+ prov: Record<string, ProvLineage>;
171
+ /** Per surfaced aggregate id → the WorkEvent kinds that are a LEGAL next action (open-action affordances). */
172
+ affordances: Record<string, WorkEventKind[]>;
173
+ /** Present iff `decisionId` was supplied — the full decision dossier (context/options/qa/outcome/artifacts). */
174
+ dossier?: DecisionDossierView;
175
+ }
93
176
  /**
94
177
  * Read-only, versioned consumption surface over a frozen track log. Holds NO `git` and only reads
95
178
  * the event file/head via `fs` — a baseline commit is supplied by the caller via `ReportOptions`
@@ -97,7 +180,7 @@ export interface WorkspaceActivityOptions {
97
180
  */
98
181
  export declare class TrackReader {
99
182
  private readonly eventsPath;
100
- readonly contractVersion = "1.6.0";
183
+ readonly contractVersion = "1.7.0";
101
184
  private readonly store;
102
185
  constructor(eventsPath: string);
103
186
  private events;
@@ -105,6 +188,34 @@ export declare class TrackReader {
105
188
  report(options: ReportOptions): Report;
106
189
  /** Flat, filtered query over report rows (SPEC §6). */
107
190
  query(filter: QueryFilter, options: ReportOptions): ReportRow[];
191
+ /**
192
+ * M5 (canevas) — a cheap change cursor: the log-tail `contentHash` (head) + event `count`, O(tail). The
193
+ * HOST's liveness primitive: poll this, re-read `canevas`/`amendmentTrace` on change. PURE (no clock, no
194
+ * socket). The cursor changes IFF the log grew.
195
+ */
196
+ cursor(): Cursor;
197
+ /**
198
+ * M5 (canevas) — has the log grown since `cursor`? Returns the LIVE cursor + a `changed` flag (the head
199
+ * hash OR count differs). The host holds a cursor from its last read and calls this to decide whether to
200
+ * re-materialize. PURE.
201
+ */
202
+ changesSince(cursor: Cursor): CursorDelta;
203
+ /**
204
+ * M5 (canevas) — the materialized canevas for ONE workspace: the report + WP rollup (reusing
205
+ * `buildReport` with `wpTree`/`decisions`), joined per surfaced aggregate with its `prov` lineage summary
206
+ * (latest write provenance) + open-action affordances (the WorkEvent kinds that are a LEGAL next action).
207
+ * With `decisionId`, also includes the full decision dossier (context/options/qa/outcome/artifacts). PURE:
208
+ * no clock, no socket — the host owns liveness (poll `cursor`, re-read here on change).
209
+ */
210
+ canevas(workspace: string, opts: CanevasOptions): CanevasView;
211
+ /**
212
+ * M5 (canevas) — the human/machine diff: an ORDERED (by seq), prov-tagged projection over the aggregate's
213
+ * `spec.amended` / `dossier.revised` / `decision.artifact-added` / `decision.outcome` events. PURE replay;
214
+ * ZERO new event data — `origin` derives from `prov.proposed` (true ⇒ machine, false ⇒ human). An AI
215
+ * proposal (proposed:true, with a proposalRef) and a human acceptance (referencing the same proposalRef)
216
+ * BOTH appear — the machine origin is NEVER laundered away.
217
+ */
218
+ amendmentTrace(aggregateId: ItemId): AmendmentStep[];
108
219
  /**
109
220
  * Scope §A/§B — `status(level)` projection (spec|plan|wp|lot|task). Additive read-only generalization
110
221
  * of `computeWpTree`+`bucketOf`; adds no aggregate, no stored status axis. `requireAccepted` (default
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAc,MAAM,oBAAoB,CAAA;AAC5F,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAEhG,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,UAAU,CAAA;AAE5C,6FAA6F;AAC7F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,aAAa,EAAE,MAAM,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,sFAAsF;AACtF,MAAM,MAAM,SAAS,GACjB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAA;AAExB,mGAAmG;AACnG,qBAAa,iBAAkB,SAAQ,KAAK;IAGxC,QAAQ,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;gBADhF,OAAO,EAAE,MAAM,EACN,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;CAKnF;AAID;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,oGAAoG;AACpG,MAAM,MAAM,aAAa,GACrB,sBAAsB,GACtB,kBAAkB,GAClB,kBAAkB,GAClB,WAAW,CAAA;AAEf,0FAA0F;AAC1F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,aAAa,CAAA;IACrB,kGAAkG;IAClG,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,gGAAgG;IAChG,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,kGAAkG;IAClG,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,6GAA6G;AAC7G,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAA;IACX,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AASD;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,4GAA4G;AAC5G,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,2GAA2G;AAC3G,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,aAAa,CAAA;IACnB,6FAA6F;IAC7F,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uGAAuG;IACvG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,sGAAsG;AACtG,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,0GAA0G;AAC1G,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAA;IACd,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACjC,8GAA8G;IAC9G,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAC5C,gHAAgH;IAChH,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAyCD;;;;GAIG;AACH,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,UAAU;IAHvC,QAAQ,CAAC,eAAe,WAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEL,UAAU,EAAE,MAAM;IAI/C,OAAO,CAAC,MAAM;IAId,yCAAyC;IACzC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAItC,uDAAuD;IACvD,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE;IAI/D;;;;OAIG;IACH,MAAM,IAAI,MAAM;IAShB;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAKzC;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,WAAW;IAsE7D;;;;;;OAMG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE;IA0BpD;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,EAAE;IAOxE,8EAA8E;IAC9E,QAAQ,IAAI,eAAe;IAI3B;;;;OAIG;IACH,oBAAoB,IAAI,kBAAkB,EAAE;IAW5C;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;IAMnD;;;;;;;;;;;;;;OAcG;IACH,aAAa,CACX,IAAI,EAAE,kBAAkB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAChE,mBAAmB;IAqBtB;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,GAAG,iBAAiB;IAkFvF,+EAA+E;IAC/E,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/D,6FAA6F;IAC7F,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS;IAItD;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAcpD,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,aAAa;CAatB"}
@@ -25,7 +25,7 @@ import { scopeValidate as runScopeValidate, } from './scope-validate.js';
25
25
  * shapes it returns may only GROW (new methods / new optional fields); nothing is removed or
26
26
  * repurposed without a major bump. Consumers gate on `reader.contractVersion`.
27
27
  */
28
- export const READ_CONTRACT_VERSION = '1.6.0'; // +scopeValidate() advisory read (Scope §B(b), additive)
28
+ export const READ_CONTRACT_VERSION = '1.7.0'; // +cursor/changesSince/canevas/amendmentTrace (M5 canevas, additive)
29
29
  /** Thrown by `requireFresh` when the sidecar is unsafe to consume (stale, absent, or tampered). */
30
30
  export class StaleSidecarError extends Error {
31
31
  detail;
@@ -37,6 +37,47 @@ export class StaleSidecarError extends Error {
37
37
  }
38
38
  const isSha256 = (v) => typeof v === 'string' && v.startsWith('sha256:');
39
39
  const DEFAULT_IDLE_MS = 86_400_000; // 24h
40
+ // The persisted event types projected into an aggregate's amendment trace (the human/machine diff source).
41
+ const AMENDMENT_EVENT_TYPES = new Set([
42
+ 'spec.amended',
43
+ 'dossier.revised',
44
+ 'decision.artifact-added',
45
+ 'decision.outcome',
46
+ ]);
47
+ /**
48
+ * The open-action affordances for ONE non-decision item: the WorkEvent kinds that are a LEGAL next action
49
+ * given its current spec/realization state (the canevas shows the human/AI exactly what they may submit).
50
+ * Derived from the same monotone transition machines the facade enforces — a superset is fine (the facade
51
+ * re-checks), but we mirror the real legality so the canevas never offers a dead button.
52
+ */
53
+ function itemAffordances(state, itemId) {
54
+ const item = state.items.get(itemId);
55
+ if (item === undefined)
56
+ return [];
57
+ const out = [];
58
+ // Spec axis (monotone to-specify → specified). A spec amendment is always offerable (record-only).
59
+ if (item.specStatus === 'to-specify')
60
+ out.push('item.spec');
61
+ out.push('item.spec-amend');
62
+ // Realization axis (forward transitions; terminal states offer nothing).
63
+ if (item.realization === 'to-do')
64
+ out.push('item.realize');
65
+ else if (item.realization === 'in-progress')
66
+ out.push('item.realize');
67
+ // Cross-cutting actions available while the item is live (not terminal).
68
+ if (item.realization !== 'done' && item.realization !== 'cancelled' && item.realization !== 'rejected') {
69
+ out.push('item.reparent', 'priority.assess', 'acceptance.criterion', 'blocker.raise');
70
+ }
71
+ return out;
72
+ }
73
+ /** Open-action affordances for a decision, by its outcome state (the outcome machine the facade enforces). */
74
+ function decisionAffordances(outcome) {
75
+ // Whole-dossier revise + an append-only artifact are always offerable; outcome only until terminal.
76
+ const out = ['decision.dossier', 'decision.add-artifact'];
77
+ if (outcome === 'pending' || outcome === 'deferred')
78
+ out.push('decision.outcome');
79
+ return out;
80
+ }
40
81
  /**
41
82
  * Read-only, versioned consumption surface over a frozen track log. Holds NO `git` and only reads
42
83
  * the event file/head via `fs` — a baseline commit is supplied by the caller via `ReportOptions`
@@ -61,6 +102,139 @@ export class TrackReader {
61
102
  query(filter, options) {
62
103
  return runQuery(fold(this.events()), filter, options);
63
104
  }
105
+ /**
106
+ * M5 (canevas) — a cheap change cursor: the log-tail `contentHash` (head) + event `count`, O(tail). The
107
+ * HOST's liveness primitive: poll this, re-read `canevas`/`amendmentTrace` on change. PURE (no clock, no
108
+ * socket). The cursor changes IFF the log grew.
109
+ */
110
+ cursor() {
111
+ const head = readHead(this.eventsPath);
112
+ if (head !== null)
113
+ return { head: head.lastContentHash, count: head.streamLength };
114
+ // No head anchor (or a malformed one): derive from the log tail directly — equally O(tail).
115
+ const events = this.events();
116
+ const last = events.at(-1);
117
+ return { head: last !== undefined ? last.contentHash : null, count: events.length };
118
+ }
119
+ /**
120
+ * M5 (canevas) — has the log grown since `cursor`? Returns the LIVE cursor + a `changed` flag (the head
121
+ * hash OR count differs). The host holds a cursor from its last read and calls this to decide whether to
122
+ * re-materialize. PURE.
123
+ */
124
+ changesSince(cursor) {
125
+ const live = this.cursor();
126
+ return { changed: live.head !== cursor.head || live.count !== cursor.count, head: live.head, count: live.count };
127
+ }
128
+ /**
129
+ * M5 (canevas) — the materialized canevas for ONE workspace: the report + WP rollup (reusing
130
+ * `buildReport` with `wpTree`/`decisions`), joined per surfaced aggregate with its `prov` lineage summary
131
+ * (latest write provenance) + open-action affordances (the WorkEvent kinds that are a LEGAL next action).
132
+ * With `decisionId`, also includes the full decision dossier (context/options/qa/outcome/artifacts). PURE:
133
+ * no clock, no socket — the host owns liveness (poll `cursor`, re-read here on change).
134
+ */
135
+ canevas(workspace, opts) {
136
+ const events = this.events();
137
+ const state = fold(events);
138
+ const baseReport = buildReport(state, {
139
+ baselineCommit: opts.baselineCommit,
140
+ requireAccepted: opts.requireAccepted ?? false,
141
+ decisions: true,
142
+ wpTree: true,
143
+ });
144
+ // Scope the report to the workspace: filter bucket rows, decision rows, and the WP forest (a WP whose
145
+ // workspace ≠ the named one is dropped). buildReport is global; the canevas is per-workspace.
146
+ const report = {
147
+ buckets: {
148
+ AWAITED: baseReport.buckets.AWAITED.filter((r) => r.workspace === workspace),
149
+ DROPPED: baseReport.buckets.DROPPED.filter((r) => r.workspace === workspace),
150
+ DONE: baseReport.buckets.DONE.filter((r) => r.workspace === workspace),
151
+ 'TO-DO': baseReport.buckets['TO-DO'].filter((r) => r.workspace === workspace),
152
+ },
153
+ ...(baseReport.decisions !== undefined
154
+ ? { decisions: baseReport.decisions.filter((d) => d.workspace === workspace) }
155
+ : {}),
156
+ ...(baseReport.wpTree !== undefined
157
+ ? { wpTree: baseReport.wpTree.filter((n) => state.items.get(n.id)?.workspace === workspace) }
158
+ : {}),
159
+ };
160
+ // Per-aggregate prov lineage (latest write on each surfaced aggregate) + open-action affordances. We
161
+ // surface every item/decision in the workspace (bucket rows AND WP containers AND decisions).
162
+ const latestProvAt = new Map();
163
+ for (const e of events) {
164
+ const prev = latestProvAt.get(e.aggregateId);
165
+ if (prev === undefined || e.at >= prev.at) {
166
+ latestProvAt.set(e.aggregateId, { ...(e.prov !== undefined ? { prov: e.prov } : {}), at: e.at });
167
+ }
168
+ }
169
+ const prov = {};
170
+ const affordances = {};
171
+ const surface = (id) => {
172
+ const meta = latestProvAt.get(id);
173
+ const p = meta?.prov;
174
+ const proposed = p?.proposed ?? false;
175
+ prov[id] = {
176
+ origin: proposed ? 'machine' : 'human',
177
+ proposed,
178
+ auth: p?.auth ?? 'local-user',
179
+ ...(p?.principal !== undefined ? { principal: p.principal } : {}),
180
+ latestAt: meta?.at ?? '',
181
+ };
182
+ };
183
+ for (const item of state.items.values()) {
184
+ if (item.workspace !== workspace)
185
+ continue;
186
+ surface(item.id);
187
+ affordances[item.id] = itemAffordances(state, item.id);
188
+ }
189
+ for (const d of state.decisions.values()) {
190
+ if (d.workspace !== workspace)
191
+ continue;
192
+ surface(d.id);
193
+ affordances[d.id] = decisionAffordances(d.outcome);
194
+ }
195
+ const view = { workspace, report, prov, affordances };
196
+ if (opts.decisionId !== undefined) {
197
+ const d = state.decisions.get(opts.decisionId);
198
+ if (d !== undefined) {
199
+ view.dossier = { id: d.id, title: d.title, workspace: d.workspace, outcome: d.outcome, dossier: d.dossier };
200
+ }
201
+ }
202
+ return view;
203
+ }
204
+ /**
205
+ * M5 (canevas) — the human/machine diff: an ORDERED (by seq), prov-tagged projection over the aggregate's
206
+ * `spec.amended` / `dossier.revised` / `decision.artifact-added` / `decision.outcome` events. PURE replay;
207
+ * ZERO new event data — `origin` derives from `prov.proposed` (true ⇒ machine, false ⇒ human). An AI
208
+ * proposal (proposed:true, with a proposalRef) and a human acceptance (referencing the same proposalRef)
209
+ * BOTH appear — the machine origin is NEVER laundered away.
210
+ */
211
+ amendmentTrace(aggregateId) {
212
+ const steps = [];
213
+ for (const e of this.events()) {
214
+ if (e.aggregateId !== aggregateId)
215
+ continue;
216
+ if (!AMENDMENT_EVENT_TYPES.has(e.type))
217
+ continue;
218
+ const proposed = e.prov?.proposed ?? false;
219
+ const p = e.payload;
220
+ steps.push({
221
+ seq: e.seq,
222
+ at: e.at,
223
+ by: e.by,
224
+ kind: e.type,
225
+ prov: {
226
+ proposed,
227
+ auth: e.prov?.auth ?? 'local-user',
228
+ ...(e.prov?.principal !== undefined ? { principal: e.prov.principal } : {}),
229
+ },
230
+ origin: proposed ? 'machine' : 'human',
231
+ ...(typeof p.summary === 'string' ? { summary: p.summary } : {}),
232
+ ...(typeof p.resultHash === 'string' ? { patchRef: p.resultHash } : {}),
233
+ ...(typeof p.proposalRef === 'string' ? { proposalRef: p.proposalRef } : {}),
234
+ });
235
+ }
236
+ return steps.sort((a, b) => a.seq - b.seq);
237
+ }
64
238
  /**
65
239
  * Scope §A/§B — `status(level)` projection (spec|plan|wp|lot|task). Additive read-only generalization
66
240
  * of `computeWpTree`+`bucketOf`; adds no aggregate, no stored status axis. `requireAccepted` (default