@sentropic/track 0.88.0 → 0.89.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.
Files changed (64) hide show
  1. package/dist/cli/index.d.ts.map +1 -1
  2. package/dist/cli/index.js +175 -28
  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 +16 -0
  7. package/dist/events/types.js.map +1 -1
  8. package/dist/events/validate.d.ts +10 -0
  9. package/dist/events/validate.d.ts.map +1 -1
  10. package/dist/events/validate.js +81 -0
  11. package/dist/events/validate.js.map +1 -1
  12. package/dist/ingest/contract.d.ts +3 -2
  13. package/dist/ingest/contract.d.ts.map +1 -1
  14. package/dist/ingest/contract.js +33 -1
  15. package/dist/ingest/contract.js.map +1 -1
  16. package/dist/ingest/index.d.ts.map +1 -1
  17. package/dist/ingest/index.js +6 -5
  18. package/dist/ingest/index.js.map +1 -1
  19. package/dist/ingest/ingest.d.ts.map +1 -1
  20. package/dist/ingest/ingest.js +17 -0
  21. package/dist/ingest/ingest.js.map +1 -1
  22. package/dist/ingest/map.d.ts.map +1 -1
  23. package/dist/ingest/map.js +11 -0
  24. package/dist/ingest/map.js.map +1 -1
  25. package/dist/model/index.d.ts +1 -1
  26. package/dist/model/index.d.ts.map +1 -1
  27. package/dist/model/index.js +1 -1
  28. package/dist/model/index.js.map +1 -1
  29. package/dist/model/item.d.ts +65 -0
  30. package/dist/model/item.d.ts.map +1 -1
  31. package/dist/model/item.js +49 -0
  32. package/dist/model/item.js.map +1 -1
  33. package/dist/read/commands.d.ts +23 -11
  34. package/dist/read/commands.d.ts.map +1 -1
  35. package/dist/read/commands.js +142 -36
  36. package/dist/read/commands.js.map +1 -1
  37. package/dist/read/contract.d.ts +21 -3
  38. package/dist/read/contract.d.ts.map +1 -1
  39. package/dist/read/contract.js +26 -2
  40. package/dist/read/contract.js.map +1 -1
  41. package/dist/report/blocker-status.d.ts.map +1 -1
  42. package/dist/report/blocker-status.js +11 -0
  43. package/dist/report/blocker-status.js.map +1 -1
  44. package/dist/report/format.d.ts +55 -1
  45. package/dist/report/format.d.ts.map +1 -1
  46. package/dist/report/format.js +203 -72
  47. package/dist/report/format.js.map +1 -1
  48. package/dist/state/fold.d.ts.map +1 -1
  49. package/dist/state/fold.js +48 -0
  50. package/dist/state/fold.js.map +1 -1
  51. package/dist/track.d.ts +34 -1
  52. package/dist/track.d.ts.map +1 -1
  53. package/dist/track.js +95 -2
  54. package/dist/track.js.map +1 -1
  55. package/package.json +1 -1
  56. package/skills/track-operation/SKILL.md +12 -2
  57. package/dist/report/html.d.ts +0 -9
  58. package/dist/report/html.d.ts.map +0 -1
  59. package/dist/report/html.js +0 -73
  60. package/dist/report/html.js.map +0 -1
  61. package/dist/report/present.d.ts +0 -28
  62. package/dist/report/present.d.ts.map +0 -1
  63. package/dist/report/present.js +0 -32
  64. package/dist/report/present.js.map +0 -1
@@ -1,26 +1,38 @@
1
- import { type Format, type InlineOptions } from '../report/format.js';
2
- import type { QueryFilter, ReportOptions } from '../report/build.js';
1
+ import { type Format, type InlineOptions, type ReportScopeProjection } from '../report/format.js';
2
+ import type { QueryFilter, Report, ReportOptions } from '../report/build.js';
3
3
  import type { StatusLevel } from '../report/status-by-level.js';
4
4
  import type { TrackReader } from './contract.js';
5
- export declare function reportText(reader: TrackReader, options: ReportOptions, format: Format, now?: string, subWp?: boolean): string;
5
+ /** A CLI-resolved selector. Dates are already absolute instants; refs are full commit ids when applicable. */
6
+ export interface ReportPeriodSelection {
7
+ requested: string;
8
+ from?: string;
9
+ to?: string;
10
+ fromRef: string | null;
11
+ toRef: string | null;
12
+ }
13
+ export interface ScopedReportProjection {
14
+ report: Report;
15
+ scope: ReportScopeProjection;
16
+ }
17
+ /**
18
+ * Read-only `report --scope` projection. A selector is exact and may name a container id, assigned
19
+ * code, or derived label; a match against more than one container fails rather than drifting after a
20
+ * positional-label renumbering. The selected root carries its complete nested subtree.
21
+ */
22
+ export declare function projectReportScope(report: Report, selector: string): ScopedReportProjection;
23
+ export declare function reportText(reader: TrackReader, options: ReportOptions, format: Format, now?: string, subWp?: boolean, scopeSelector?: string, periodSelection?: ReportPeriodSelection): string;
6
24
  /**
7
25
  * report-revamp §B — the INLINE (compact, one-screen) conductor render. Same read path + directive set as
8
26
  * `reportText`; only the presentation differs (cohort-collapse + width truncation live in the renderer). A
9
27
  * WP-less repo falls back to the concise action report (never a flat dump).
10
28
  */
11
- export declare function reportInline(reader: TrackReader, options: ReportOptions, inline?: InlineOptions): string;
12
- /**
13
- * report-revamp §C — the DS-compatible HTML FRAGMENT render (`--format html`). Reuses the SHARED presenter
14
- * contract (the same path focus's `renderHtml` uses) over the SAME `ReportView` the JSON path exposes. A
15
- * WP-less repo still yields a valid (empty-state) fragment via the same presenter.
16
- */
17
- export declare function reportHtml(reader: TrackReader, options: ReportOptions, now?: string, subWp?: boolean): string;
29
+ export declare function reportInline(reader: TrackReader, options: ReportOptions, inline?: InlineOptions, now?: string, periodSelection?: ReportPeriodSelection): string;
18
30
  /**
19
31
  * Criterion 10b — THE one command that resolves a short handle (`8.1`, `H.2`, `D3`) back to its item or
20
32
  * dossier. Without it a report the owner can read is a report they cannot act on; with it, no ULID has to
21
33
  * appear in a column to keep a row dispatchable.
22
34
  */
23
- export declare function resolveHandle(reader: TrackReader, options: ReportOptions, handle: string): string;
35
+ export declare function resolveHandle(reader: TrackReader, options: ReportOptions, handle: string, scopeSelector?: string): string;
24
36
  /**
25
37
  * `report --level <spec|plan|wp|lot|task>` rendered (Scope §A/§B). `json` carries the structured status
26
38
  * groups; `text`/`md` render a one-line-per-group `done/active (pct) STATUS label — title` table. Pure
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/read/commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAA4H,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAG/L,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAmChD,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,GACd,MAAM,CA8BR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAE,aAAkB,GAAG,MAAM,CAc5G;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,GACd,MAAM,CAeR;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAajG;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GACb,MAAM,CAWR;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GACb,MAAM,CAGR"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/read/commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmL,KAAK,MAAM,EAAE,KAAK,aAAa,EAA4B,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAE5S,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAE/D,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhE,8GAA8G;AAC9G,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAiGD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,qBAAqB,CAAA;CAC7B;AAYD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,sBAAsB,CA4C3F;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,qBAAqB,GACtC,MAAM,CA4CR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,aAAkB,EAC1B,GAAG,CAAC,EAAE,MAAM,EACZ,eAAe,CAAC,EAAE,qBAAqB,GACtC,MAAM,CAkBR;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBzH;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GACb,MAAM,CAWR;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GACb,MAAM,CAGR"}
@@ -2,8 +2,51 @@
2
2
  // these pure functions: a `TrackReader` (no git/fs beyond the event log) + the SAME formatters, with
3
3
  // the adapter supplying `baselineCommit` (CLI from git HEAD, MCP from a tool argument). This is what
4
4
  // makes CLI≡MCP parity STRUCTURAL (one layer), not coincidental.
5
- import { buildWpConductorView, formatActionReport, formatReport, formatRows, formatWpConductor, formatWpConductorInline, wpTotals } from '../report/format.js';
6
- import { formatWpConductorHtml } from '../report/html.js';
5
+ import { assertReportFormat, buildWpConductorView, formatActionReport, formatReport, formatRows, formatWpConductor, formatWpConductorInline, reportPeriod, reportPeriodPayload, wpTotals } from '../report/format.js';
6
+ /**
7
+ * Project a requested time interval from the COMPLETE snapshot. The report's state was folded before this
8
+ * runs; filtering events here can therefore change FAIT but never make a container or open work disappear.
9
+ */
10
+ function periodProjection(snapshot, selection, now) {
11
+ const selected = selection !== undefined;
12
+ let from = selection?.from ?? snapshot.logWindow.from;
13
+ const to = selection?.to ?? (selected ? snapshot.logWindow.to : now ?? snapshot.logWindow.to);
14
+ let fromMs = from === undefined ? undefined : Date.parse(from);
15
+ const toMs = to === undefined ? undefined : Date.parse(to);
16
+ // Every resolved period is ordered at this one boundary. A caller-pinned clock before the journal makes
17
+ // an honest empty whole-log interval; an explicit reversed selector remains invalid.
18
+ if (fromMs !== undefined && toMs !== undefined && fromMs > toMs) {
19
+ if (selection === undefined && now !== undefined) {
20
+ from = to;
21
+ fromMs = toMs;
22
+ }
23
+ else if (selection?.from !== undefined && selection.to === undefined) {
24
+ throw new Error('--since must not be after the journal head');
25
+ }
26
+ else {
27
+ throw new Error('resolved report period must not end before it begins');
28
+ }
29
+ }
30
+ const events = snapshot.events.filter((event) => {
31
+ const at = Date.parse(event.at);
32
+ return (fromMs === undefined || at >= fromMs) && (toMs === undefined || at <= toMs);
33
+ });
34
+ const deliveredItemIds = new Set(events
35
+ .filter((event) => event.aggregate === 'item' && event.type === 'realization.transition' && event.payload['to'] === 'done')
36
+ .map((event) => event.aggregateId));
37
+ return {
38
+ payload: {
39
+ requested: selection?.requested ?? null,
40
+ ...(from !== undefined ? { from } : {}),
41
+ ...(to !== undefined ? { to } : {}),
42
+ fromRef: selection?.fromRef ?? null,
43
+ toRef: selection?.toRef ?? null,
44
+ eventsInWindow: events.length,
45
+ eventsTotal: snapshot.events.length,
46
+ },
47
+ deliveredItemIds,
48
+ };
49
+ }
7
50
  /**
8
51
  * `report` rendered exactly as the CLI renders it (SPEC §7).
9
52
  *
@@ -21,81 +64,144 @@ import { formatWpConductorHtml } from '../report/html.js';
21
64
  * module is the boundary: the renderer stays clockless, so the same log and the same `now` always render
22
65
  * the same bytes.
23
66
  */
24
- function conductorMeta(reader, options, now, subWp) {
25
- const window = reader.logWindow();
67
+ function conductorMeta(options, snapshot, now, subWp, scopeProjection, period, windowedDeliveries = false) {
68
+ const window = snapshot.logWindow;
69
+ const revision = snapshot.cursor;
26
70
  return {
27
71
  baselineCommit: options.baselineCommit,
28
72
  ...(window.from !== undefined ? { logFrom: window.from } : {}),
29
73
  ...(window.to !== undefined ? { logTo: window.to } : {}),
74
+ journalRevision: { events: revision.count, head: revision.head },
30
75
  ...(now !== undefined ? { now } : {}),
31
76
  ...(subWp === true ? { subWp } : {}),
77
+ ...(scopeProjection !== undefined ? { scopeProjection } : {}),
78
+ ...(period !== undefined ? { periodWindow: period.payload } : {}),
79
+ ...(windowedDeliveries ? { deliveredItemIds: period?.deliveredItemIds ?? new Set() } : {}),
80
+ };
81
+ }
82
+ function flattenWpTree(nodes) {
83
+ const flat = [];
84
+ const walk = (node) => {
85
+ flat.push(node);
86
+ for (const child of node.children)
87
+ walk(child);
88
+ };
89
+ for (const node of nodes)
90
+ walk(node);
91
+ return flat;
92
+ }
93
+ /**
94
+ * Read-only `report --scope` projection. A selector is exact and may name a container id, assigned
95
+ * code, or derived label; a match against more than one container fails rather than drifting after a
96
+ * positional-label renumbering. The selected root carries its complete nested subtree.
97
+ */
98
+ export function projectReportScope(report, selector) {
99
+ const tree = report.wpTree ?? [];
100
+ const allNodes = flattenWpTree(tree);
101
+ const needle = selector.trim();
102
+ const exactCodeMatches = allNodes.filter((node) => node.code === selector);
103
+ if (needle === '' && exactCodeMatches.length === 0)
104
+ throw new Error('scope selector must not be empty');
105
+ const matches = allNodes.filter((node) => node.id === needle || node.code === selector || node.label === needle);
106
+ if (matches.length === 0) {
107
+ throw new Error(`unknown scope selector: ${selector} (use an exact container id, assigned code, or derived label)`);
108
+ }
109
+ if (matches.length > 1) {
110
+ throw new Error(`ambiguous scope selector: ${selector} (${matches.map((node) => `${node.label} (${node.id})`).join(', ')})`);
111
+ }
112
+ const selected = matches[0];
113
+ const selectedNodes = flattenWpTree([selected]);
114
+ const leafIds = new Set(selectedNodes.flatMap((node) => node.leaves.map((leaf) => leaf.id)));
115
+ const decisionRefs = new Set(selectedNodes.flatMap((node) => node.leaves.flatMap((leaf) => leaf.openBlockers))
116
+ .filter((blocker) => blocker.kind === 'decision' && blocker.ref !== undefined)
117
+ .map((blocker) => blocker.ref));
118
+ const decisions = report.decisions?.filter((decision) => decisionRefs.has(decision.id));
119
+ const buckets = {
120
+ AWAITED: report.buckets.AWAITED.filter((row) => leafIds.has(row.id)),
121
+ DROPPED: report.buckets.DROPPED.filter((row) => leafIds.has(row.id)),
122
+ DONE: report.buckets.DONE.filter((row) => leafIds.has(row.id)),
123
+ 'TO-DO': report.buckets['TO-DO'].filter((row) => leafIds.has(row.id)),
124
+ };
125
+ const projectedRows = allNodes.length + (report.outsideRollup?.length ?? 0) + (report.decisions?.length ?? 0);
126
+ const scopedRows = selectedNodes.length + (decisions?.length ?? 0);
127
+ return {
128
+ report: {
129
+ buckets,
130
+ ...(decisions !== undefined ? { decisions } : {}),
131
+ wpTree: [selected],
132
+ },
133
+ scope: {
134
+ selector: exactCodeMatches.includes(selected) ? selector : needle,
135
+ id: selected.id,
136
+ label: selected.label,
137
+ includes: 'subtree',
138
+ excludedProjectionRows: projectedRows - scopedRows,
139
+ },
32
140
  };
33
141
  }
34
- export function reportText(reader, options, format, now, subWp) {
35
- const report = reader.report(options);
36
- const meta = conductorMeta(reader, options, now, subWp);
142
+ export function reportText(reader, options, format, now, subWp, scopeSelector, periodSelection) {
143
+ assertReportFormat(format);
144
+ const snapshot = reader.reportSnapshot(options);
145
+ const globalReport = snapshot.report;
146
+ const scoped = scopeSelector === undefined ? undefined : projectReportScope(globalReport, scopeSelector);
147
+ const report = scoped?.report ?? globalReport;
148
+ const projection = periodProjection(snapshot, periodSelection, now);
149
+ const meta = conductorMeta(options, snapshot, now, subWp, scoped?.scope, projection, periodSelection !== undefined);
150
+ const period = reportPeriod(meta);
151
+ const payload = reportPeriodPayload(meta);
37
152
  if (options.wpTree && report.wpTree !== undefined) {
38
153
  if (format === 'json') {
39
154
  // Machine contract preserved (0.19.0 shape) + additive optional `view` for skill rendering. WP-codes
40
155
  // A3: `--active-roster` is a HUMAN-render option only — JSON ALWAYS carries the full forest (every node
41
156
  // + its `terminal` flag) so a machine consumer filters terminal roots itself.
42
157
  const view = report.wpTree.length > 0
43
- ? buildWpConductorView(report.wpTree, report.decisions ?? [], report.outsideRollup, 'global', meta)
158
+ ? buildWpConductorView(report.wpTree, report.decisions ?? [], report.outsideRollup, scoped === undefined ? 'global' : `${scoped.scope.label} (sous-arbre)`, meta)
44
159
  : undefined;
45
- return `${JSON.stringify({ ...report, wpTotals: wpTotals(report.wpTree, report.outsideRollup), ...(view !== undefined ? { view } : {}) }, null, 2)}\n`;
160
+ return `${JSON.stringify({ ...report, period: payload, wpTotals: wpTotals(report.wpTree, report.outsideRollup), ...(view !== undefined ? { view } : {}) }, null, 2)}\n`;
46
161
  }
47
162
  // text/md: the rendered conductor tables when there is an actual WP forest. WP-codes A3 (DESIGN §A3) —
48
163
  // `--active-roster` OMITS terminal (DROPPED) ROOTS from the rendered roster. The ordinals were assigned in
49
164
  // `computeWpTree` over ALL roots, so the survivors keep their `WP<n>`/code (a gap appears) — no re-pack.
50
165
  const roster = options.activeRoster === true ? report.wpTree.filter((n) => n.terminal !== true) : report.wpTree;
51
166
  if (roster.length > 0) {
52
- return formatWpConductor(roster, format, report.decisions, report.outsideRollup, options.activeRoster === true ? 'roster actif (terminal exclu)' : 'global', meta);
167
+ return formatWpConductor(roster, format, report.decisions, report.outsideRollup, options.activeRoster === true ? 'roster actif (terminal exclu)' : scoped === undefined ? 'global' : `${scoped.scope.label} (sous-arbre)`, meta);
53
168
  }
54
169
  // No WP containers yet (or every root filtered out): keep the report action-oriented, not a flat dump.
55
- return formatActionReport(report, format);
170
+ return `${period.label}\n\n${formatActionReport(report, format)}\n`;
56
171
  }
57
- return formatReport(report, format);
172
+ if (format === 'json')
173
+ return `${JSON.stringify({ ...report, period: payload }, null, 2)}\n`;
174
+ return `${period.label}\n\n${formatReport(report, format)}`;
58
175
  }
59
176
  /**
60
177
  * report-revamp §B — the INLINE (compact, one-screen) conductor render. Same read path + directive set as
61
178
  * `reportText`; only the presentation differs (cohort-collapse + width truncation live in the renderer). A
62
179
  * WP-less repo falls back to the concise action report (never a flat dump).
63
180
  */
64
- export function reportInline(reader, options, inline = {}) {
65
- const report = reader.report(options);
66
- if (report.wpTree !== undefined && report.wpTree.length > 0) {
67
- const roster = options.activeRoster === true ? report.wpTree.filter((n) => n.terminal !== true) : report.wpTree;
68
- if (roster.length > 0) {
69
- return formatWpConductorInline(roster, report.decisions ?? [], { ...inline, ...(options.activeRoster === true ? { totalScope: 'roster actif (terminal exclu)' } : {}) }, report.outsideRollup);
70
- }
71
- }
72
- return formatActionReport(report, 'text');
73
- }
74
- /**
75
- * report-revamp §C — the DS-compatible HTML FRAGMENT render (`--format html`). Reuses the SHARED presenter
76
- * contract (the same path focus's `renderHtml` uses) over the SAME `ReportView` the JSON path exposes. A
77
- * WP-less repo still yields a valid (empty-state) fragment via the same presenter.
78
- */
79
- export function reportHtml(reader, options, now, subWp) {
80
- const report = reader.report(options);
81
- const meta = conductorMeta(reader, options, now, subWp);
82
- const decisions = report.decisions ?? [];
181
+ export function reportInline(reader, options, inline = {}, now, periodSelection) {
182
+ const snapshot = reader.reportSnapshot(options);
183
+ const report = snapshot.report;
184
+ const projection = periodProjection(snapshot, periodSelection, now);
185
+ const meta = conductorMeta(options, snapshot, now, undefined, undefined, projection, periodSelection !== undefined);
83
186
  if (report.wpTree !== undefined && report.wpTree.length > 0) {
84
187
  const roster = options.activeRoster === true ? report.wpTree.filter((n) => n.terminal !== true) : report.wpTree;
85
188
  if (roster.length > 0) {
86
- return `${formatWpConductorHtml(roster, decisions, undefined, report.outsideRollup, options.activeRoster === true ? 'roster actif (terminal exclu)' : 'global', meta)}\n`;
189
+ return formatWpConductorInline(roster, report.decisions ?? [], { ...inline, ...(options.activeRoster === true ? { totalScope: 'roster actif (terminal exclu)' } : {}) }, report.outsideRollup, meta);
87
190
  }
88
191
  }
89
- return `${formatWpConductorHtml([], decisions, undefined, report.outsideRollup, 'global', meta)}\n`;
192
+ return `${reportPeriod(meta).label}\n\n${formatActionReport(report, 'text')}\n`;
90
193
  }
91
194
  /**
92
195
  * Criterion 10b — THE one command that resolves a short handle (`8.1`, `H.2`, `D3`) back to its item or
93
196
  * dossier. Without it a report the owner can read is a report they cannot act on; with it, no ULID has to
94
197
  * appear in a column to keep a row dispatchable.
95
198
  */
96
- export function resolveHandle(reader, options, handle) {
97
- const report = reader.report({ ...options, decisions: true, wpTree: true });
98
- const view = buildWpConductorView(report.wpTree ?? [], report.decisions ?? [], report.outsideRollup, 'global', conductorMeta(reader, options));
199
+ export function resolveHandle(reader, options, handle, scopeSelector) {
200
+ const snapshot = reader.reportSnapshot({ ...options, decisions: true, wpTree: true });
201
+ const globalReport = snapshot.report;
202
+ const scoped = scopeSelector === undefined ? undefined : projectReportScope(globalReport, scopeSelector);
203
+ const report = scoped?.report ?? globalReport;
204
+ const view = buildWpConductorView(report.wpTree ?? [], report.decisions ?? [], report.outsideRollup, scoped === undefined ? 'global' : `${scoped.scope.label} (sous-arbre)`, conductorMeta(options, snapshot, undefined, undefined, scoped?.scope));
99
205
  const wanted = handle.trim().replace(/^\[|\]$/gu, '').toUpperCase();
100
206
  const hit = view.handles.find((h) => h.handle.toUpperCase() === wanted);
101
207
  if (hit === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/read/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/read/commands.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { AcceptanceStatus, CriterionStatus } from '../model/acceptance.js';
2
- import type { ActorId, EventType, Provenance, Sha256 } from '../events/types.js';
2
+ import type { ActorId, EventType, Provenance, Sha256, TrackEvent } from '../events/types.js';
3
3
  import { type IntegrityResult } from '../events/validate.js';
4
4
  import { type ItemId, type Realization } from '../model/item.js';
5
5
  import type { VerificationRun } from '../model/verification.js';
@@ -21,7 +21,7 @@ import { type SnapshotOptions, type SnapshotV1 } from '../report/snapshot.js';
21
21
  * shapes it returns may only GROW (new methods / new optional fields); nothing is removed or
22
22
  * repurposed without a major bump. Consumers gate on `reader.contractVersion`.
23
23
  */
24
- export declare const READ_CONTRACT_VERSION = "1.21.0";
24
+ export declare const READ_CONTRACT_VERSION = "1.24.0";
25
25
  /** Provenance of the last `branch.imported` for a locator (drawn from the raw event log). */
26
26
  export interface BranchProvenance {
27
27
  locator: string;
@@ -176,6 +176,18 @@ export interface CursorDelta {
176
176
  head: Sha256 | null;
177
177
  count: number;
178
178
  }
179
+ /** One report projection and every provenance fact rendered beside it, derived from the SAME event snapshot. */
180
+ export interface ReportSnapshot {
181
+ report: Report;
182
+ logWindow: {
183
+ from?: string;
184
+ to?: string;
185
+ events: number;
186
+ };
187
+ cursor: Cursor;
188
+ /** The complete immutable log used for `report`; period filters project this, never truncate the fold. */
189
+ events: readonly TrackEvent[];
190
+ }
179
191
  /** Origin of a write, DERIVED PURELY from `prov.proposed` (true ⇒ machine/LLM-proposed; false ⇒ human). */
180
192
  export type AmendmentOrigin = 'human' | 'machine';
181
193
  /** The prov fields projected onto an amendment-trace step (a read-only summary; never re-verified). */
@@ -370,12 +382,18 @@ export interface DemandsOptions {
370
382
  */
371
383
  export declare class TrackReader {
372
384
  private readonly eventsPath;
373
- readonly contractVersion = "1.21.0";
385
+ readonly contractVersion = "1.24.0";
374
386
  private readonly store;
375
387
  constructor(eventsPath: string);
376
388
  private events;
377
389
  /** Bucketed backlog report (SPEC §7). */
378
390
  report(options: ReportOptions): Report;
391
+ /**
392
+ * A reproducible report read: the rows, period bounds, and journal cursor are all derived from ONE
393
+ * `readAll()` result. A renderer must use this instead of composing `report()` with `logWindow()` or
394
+ * `cursor()`, which would let an intervening append attest a head the rendered rows never represented.
395
+ */
396
+ reportSnapshot(options: ReportOptions): ReportSnapshot;
379
397
  /**
380
398
  * The window the LOG ITSELF carries: first recorded event → last recorded event (criterion 21). Both
381
399
  * bounds are in the log and need no selector — "the whole log" IS a window, and a report that says
@@ -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":"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"}
@@ -32,7 +32,7 @@ import { buildSnapshot } from '../report/snapshot.js';
32
32
  * shapes it returns may only GROW (new methods / new optional fields); nothing is removed or
33
33
  * repurposed without a major bump. Consumers gate on `reader.contractVersion`.
34
34
  */
35
- export const READ_CONTRACT_VERSION = '1.21.0'; // +logWindow: the period bounds the log itself carries (additive)
35
+ export const READ_CONTRACT_VERSION = '1.24.0'; // +reportSnapshot.events: window projection shares the complete folded log
36
36
  /** Thrown by `requireFresh` when the sidecar is unsafe to consume (stale, absent, or tampered). */
37
37
  export class StaleSidecarError extends Error {
38
38
  detail;
@@ -175,6 +175,10 @@ const ITEM_LIFECYCLE_EVENT_TYPES = new Set([
175
175
  'spec.abandoned',
176
176
  'spec.transition',
177
177
  'realization.transition',
178
+ // Regression expression — a reopening is a lifecycle FACT (a closure was corrected, with its motive), so the
179
+ // trace that already carries the closure must carry its correction too; a trace that showed the `done` and
180
+ // hid the reopening would be exactly the assertion-wider-than-its-evidence the 2026-07-29 ruling attacks.
181
+ 'realization.reopened',
178
182
  ]);
179
183
  /**
180
184
  * The demand status a lifecycle STEP transitions TO (for demand-axis events only). raised⇒raised;
@@ -213,7 +217,27 @@ export class TrackReader {
213
217
  }
214
218
  /** Bucketed backlog report (SPEC §7). */
215
219
  report(options) {
216
- return buildReport(fold(this.events()), options);
220
+ return this.reportSnapshot(options).report;
221
+ }
222
+ /**
223
+ * A reproducible report read: the rows, period bounds, and journal cursor are all derived from ONE
224
+ * `readAll()` result. A renderer must use this instead of composing `report()` with `logWindow()` or
225
+ * `cursor()`, which would let an intervening append attest a head the rendered rows never represented.
226
+ */
227
+ reportSnapshot(options) {
228
+ const events = this.events();
229
+ const first = events[0]?.at;
230
+ const last = events.at(-1);
231
+ return {
232
+ report: buildReport(fold(events), options),
233
+ logWindow: {
234
+ ...(first !== undefined ? { from: first } : {}),
235
+ ...(last?.at !== undefined ? { to: last.at } : {}),
236
+ events: events.length,
237
+ },
238
+ cursor: { head: last?.contentHash ?? null, count: events.length },
239
+ events,
240
+ };
217
241
  }
218
242
  /**
219
243
  * The window the LOG ITSELF carries: first recorded event → last recorded event (criterion 21). Both