@sentropic/track 0.87.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.
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +209 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/events/types.d.ts +1 -1
- package/dist/events/types.d.ts.map +1 -1
- package/dist/events/types.js +16 -0
- package/dist/events/types.js.map +1 -1
- package/dist/events/validate.d.ts +10 -0
- package/dist/events/validate.d.ts.map +1 -1
- package/dist/events/validate.js +81 -0
- package/dist/events/validate.js.map +1 -1
- package/dist/ingest/contract.d.ts +3 -2
- package/dist/ingest/contract.d.ts.map +1 -1
- package/dist/ingest/contract.js +33 -1
- package/dist/ingest/contract.js.map +1 -1
- package/dist/ingest/index.d.ts.map +1 -1
- package/dist/ingest/index.js +6 -5
- package/dist/ingest/index.js.map +1 -1
- package/dist/ingest/ingest.d.ts.map +1 -1
- package/dist/ingest/ingest.js +17 -0
- package/dist/ingest/ingest.js.map +1 -1
- package/dist/ingest/map.d.ts.map +1 -1
- package/dist/ingest/map.js +11 -0
- package/dist/ingest/map.js.map +1 -1
- package/dist/model/index.d.ts +1 -1
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +1 -1
- package/dist/model/index.js.map +1 -1
- package/dist/model/item.d.ts +65 -0
- package/dist/model/item.d.ts.map +1 -1
- package/dist/model/item.js +49 -0
- package/dist/model/item.js.map +1 -1
- package/dist/read/commands.d.ts +24 -18
- package/dist/read/commands.d.ts.map +1 -1
- package/dist/read/commands.js +167 -26
- package/dist/read/commands.js.map +1 -1
- package/dist/read/contract.d.ts +32 -3
- package/dist/read/contract.d.ts.map +1 -1
- package/dist/read/contract.js +42 -2
- package/dist/read/contract.js.map +1 -1
- package/dist/report/blocker-status.d.ts.map +1 -1
- package/dist/report/blocker-status.js +11 -0
- package/dist/report/blocker-status.js.map +1 -1
- package/dist/report/build.d.ts +6 -0
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +2 -31
- package/dist/report/build.js.map +1 -1
- package/dist/report/format.d.ts +227 -8
- package/dist/report/format.d.ts.map +1 -1
- package/dist/report/format.js +946 -106
- package/dist/report/format.js.map +1 -1
- package/dist/report/index.d.ts +1 -1
- package/dist/report/index.d.ts.map +1 -1
- package/dist/report/index.js +1 -1
- package/dist/report/index.js.map +1 -1
- package/dist/report/rollup.d.ts +14 -0
- package/dist/report/rollup.d.ts.map +1 -1
- package/dist/report/rollup.js +32 -0
- package/dist/report/rollup.js.map +1 -1
- package/dist/report/snapshot.d.ts +20 -1
- package/dist/report/snapshot.d.ts.map +1 -1
- package/dist/report/snapshot.js +9 -2
- package/dist/report/snapshot.js.map +1 -1
- package/dist/state/fold.d.ts.map +1 -1
- package/dist/state/fold.js +48 -0
- package/dist/state/fold.js.map +1 -1
- package/dist/track.d.ts +34 -1
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +95 -2
- package/dist/track.js.map +1 -1
- package/package.json +1 -1
- package/skills/track-operation/SKILL.md +16 -4
- package/dist/report/html.d.ts +0 -9
- package/dist/report/html.d.ts.map +0 -1
- package/dist/report/html.js +0 -76
- package/dist/report/html.js.map +0 -1
- package/dist/report/present.d.ts +0 -28
- package/dist/report/present.d.ts.map +0 -1
- package/dist/report/present.js +0 -32
- package/dist/report/present.js.map +0 -1
package/dist/read/commands.d.ts
CHANGED
|
@@ -1,32 +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
|
+
/** 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
|
+
}
|
|
5
17
|
/**
|
|
6
|
-
* `report`
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* deterministic action/decision fallback otherwise. Use `--flat` to force the deprecated legacy bucket dump.
|
|
10
|
-
* JSON stays the flat structured contract unless `--wp` is explicit.
|
|
11
|
-
*
|
|
12
|
-
* The CONDUCTOR view is the 3-table FAIT / À-FAIRE(%·WP) / DÉCISIONS-ACTIONS rendered for `text`/`md`.
|
|
13
|
-
* For `json` the contract is UNCHANGED from 0.19.0: the additive `{...report, wpTotals}` flat structure
|
|
14
|
-
* (so existing machine consumers keep working), PLUS an OPTIONAL `view` field carrying the conductor view
|
|
15
|
-
* model (for presentation skills). If no WP forest exists, text/md falls back to the deterministic action view.
|
|
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.
|
|
16
21
|
*/
|
|
17
|
-
export declare function
|
|
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;
|
|
18
24
|
/**
|
|
19
25
|
* report-revamp §B — the INLINE (compact, one-screen) conductor render. Same read path + directive set as
|
|
20
26
|
* `reportText`; only the presentation differs (cohort-collapse + width truncation live in the renderer). A
|
|
21
27
|
* WP-less repo falls back to the concise action report (never a flat dump).
|
|
22
28
|
*/
|
|
23
|
-
export declare function reportInline(reader: TrackReader, options: ReportOptions, inline?: InlineOptions): string;
|
|
29
|
+
export declare function reportInline(reader: TrackReader, options: ReportOptions, inline?: InlineOptions, now?: string, periodSelection?: ReportPeriodSelection): string;
|
|
24
30
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
31
|
+
* Criterion 10b — THE one command that resolves a short handle (`8.1`, `H.2`, `D3`) back to its item or
|
|
32
|
+
* dossier. Without it a report the owner can read is a report they cannot act on; with it, no ULID has to
|
|
33
|
+
* appear in a column to keep a row dispatchable.
|
|
28
34
|
*/
|
|
29
|
-
export declare function
|
|
35
|
+
export declare function resolveHandle(reader: TrackReader, options: ReportOptions, handle: string, scopeSelector?: string): string;
|
|
30
36
|
/**
|
|
31
37
|
* `report --level <spec|plan|wp|lot|task>` rendered (Scope §A/§B). `json` carries the structured status
|
|
32
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,
|
|
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"}
|
package/dist/read/commands.js
CHANGED
|
@@ -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
|
-
|
|
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
|
*
|
|
@@ -11,63 +54,161 @@ import { formatWpConductorHtml } from '../report/html.js';
|
|
|
11
54
|
* deterministic action/decision fallback otherwise. Use `--flat` to force the deprecated legacy bucket dump.
|
|
12
55
|
* JSON stays the flat structured contract unless `--wp` is explicit.
|
|
13
56
|
*
|
|
14
|
-
* The
|
|
57
|
+
* The conductor renders deterministic FAIT / À-FAIRE / ACTIONS DÉRIVÉES tables for `text`/`md`.
|
|
15
58
|
* For `json` the contract is UNCHANGED from 0.19.0: the additive `{...report, wpTotals}` flat structure
|
|
16
59
|
* (so existing machine consumers keep working), PLUS an OPTIONAL `view` field carrying the conductor view
|
|
17
60
|
* model (for presentation skills). If no WP forest exists, text/md falls back to the deterministic action view.
|
|
18
61
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Criterion 21 — the window bounds the LOG carries, plus the caller's clock when it injected one. This
|
|
64
|
+
* module is the boundary: the renderer stays clockless, so the same log and the same `now` always render
|
|
65
|
+
* the same bytes.
|
|
66
|
+
*/
|
|
67
|
+
function conductorMeta(options, snapshot, now, subWp, scopeProjection, period, windowedDeliveries = false) {
|
|
68
|
+
const window = snapshot.logWindow;
|
|
69
|
+
const revision = snapshot.cursor;
|
|
70
|
+
return {
|
|
71
|
+
baselineCommit: options.baselineCommit,
|
|
72
|
+
...(window.from !== undefined ? { logFrom: window.from } : {}),
|
|
73
|
+
...(window.to !== undefined ? { logTo: window.to } : {}),
|
|
74
|
+
journalRevision: { events: revision.count, head: revision.head },
|
|
75
|
+
...(now !== undefined ? { now } : {}),
|
|
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
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
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);
|
|
21
152
|
if (options.wpTree && report.wpTree !== undefined) {
|
|
22
153
|
if (format === 'json') {
|
|
23
154
|
// Machine contract preserved (0.19.0 shape) + additive optional `view` for skill rendering. WP-codes
|
|
24
155
|
// A3: `--active-roster` is a HUMAN-render option only — JSON ALWAYS carries the full forest (every node
|
|
25
156
|
// + its `terminal` flag) so a machine consumer filters terminal roots itself.
|
|
26
|
-
const view = report.wpTree.length > 0
|
|
27
|
-
|
|
157
|
+
const view = report.wpTree.length > 0
|
|
158
|
+
? buildWpConductorView(report.wpTree, report.decisions ?? [], report.outsideRollup, scoped === undefined ? 'global' : `${scoped.scope.label} (sous-arbre)`, meta)
|
|
159
|
+
: undefined;
|
|
160
|
+
return `${JSON.stringify({ ...report, period: payload, wpTotals: wpTotals(report.wpTree, report.outsideRollup), ...(view !== undefined ? { view } : {}) }, null, 2)}\n`;
|
|
28
161
|
}
|
|
29
162
|
// text/md: the rendered conductor tables when there is an actual WP forest. WP-codes A3 (DESIGN §A3) —
|
|
30
163
|
// `--active-roster` OMITS terminal (DROPPED) ROOTS from the rendered roster. The ordinals were assigned in
|
|
31
164
|
// `computeWpTree` over ALL roots, so the survivors keep their `WP<n>`/code (a gap appears) — no re-pack.
|
|
32
165
|
const roster = options.activeRoster === true ? report.wpTree.filter((n) => n.terminal !== true) : report.wpTree;
|
|
33
166
|
if (roster.length > 0) {
|
|
34
|
-
return formatWpConductor(roster, format, report.decisions, report.outsideRollup, options.activeRoster === true ? 'roster actif (terminal exclu)' : 'global');
|
|
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);
|
|
35
168
|
}
|
|
36
169
|
// No WP containers yet (or every root filtered out): keep the report action-oriented, not a flat dump.
|
|
37
|
-
return formatActionReport(report, format)
|
|
170
|
+
return `${period.label}\n\n${formatActionReport(report, format)}\n`;
|
|
38
171
|
}
|
|
39
|
-
|
|
172
|
+
if (format === 'json')
|
|
173
|
+
return `${JSON.stringify({ ...report, period: payload }, null, 2)}\n`;
|
|
174
|
+
return `${period.label}\n\n${formatReport(report, format)}`;
|
|
40
175
|
}
|
|
41
176
|
/**
|
|
42
177
|
* report-revamp §B — the INLINE (compact, one-screen) conductor render. Same read path + directive set as
|
|
43
178
|
* `reportText`; only the presentation differs (cohort-collapse + width truncation live in the renderer). A
|
|
44
179
|
* WP-less repo falls back to the concise action report (never a flat dump).
|
|
45
180
|
*/
|
|
46
|
-
export function reportInline(reader, options, inline = {}) {
|
|
47
|
-
const
|
|
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);
|
|
48
186
|
if (report.wpTree !== undefined && report.wpTree.length > 0) {
|
|
49
187
|
const roster = options.activeRoster === true ? report.wpTree.filter((n) => n.terminal !== true) : report.wpTree;
|
|
50
188
|
if (roster.length > 0) {
|
|
51
|
-
return formatWpConductorInline(roster, report.decisions ?? [], { ...inline, ...(options.activeRoster === true ? { totalScope: 'roster actif (terminal exclu)' } : {}) }, report.outsideRollup);
|
|
189
|
+
return formatWpConductorInline(roster, report.decisions ?? [], { ...inline, ...(options.activeRoster === true ? { totalScope: 'roster actif (terminal exclu)' } : {}) }, report.outsideRollup, meta);
|
|
52
190
|
}
|
|
53
191
|
}
|
|
54
|
-
return formatActionReport(report, 'text')
|
|
192
|
+
return `${reportPeriod(meta).label}\n\n${formatActionReport(report, 'text')}\n`;
|
|
55
193
|
}
|
|
56
194
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
195
|
+
* Criterion 10b — THE one command that resolves a short handle (`8.1`, `H.2`, `D3`) back to its item or
|
|
196
|
+
* dossier. Without it a report the owner can read is a report they cannot act on; with it, no ULID has to
|
|
197
|
+
* appear in a column to keep a row dispatchable.
|
|
60
198
|
*/
|
|
61
|
-
export function
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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));
|
|
205
|
+
const wanted = handle.trim().replace(/^\[|\]$/gu, '').toUpperCase();
|
|
206
|
+
const hit = view.handles.find((h) => h.handle.toUpperCase() === wanted);
|
|
207
|
+
if (hit === undefined) {
|
|
208
|
+
const known = view.handles.map((h) => h.handle).join(' ');
|
|
209
|
+
return `handle introuvable: ${handle}\nhandles connus: ${known === '' ? '(aucun)' : known}\n`;
|
|
69
210
|
}
|
|
70
|
-
return `${
|
|
211
|
+
return `${hit.handle}\t${hit.kind}\t${hit.id}\t${hit.title}${hit.wpLabel === undefined ? '' : `\t${hit.wpLabel}`}\n`;
|
|
71
212
|
}
|
|
72
213
|
/**
|
|
73
214
|
* `report --level <spec|plan|wp|lot|task>` rendered (Scope §A/§B). `json` carries the structured status
|
|
@@ -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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"}
|
package/dist/read/contract.d.ts
CHANGED
|
@@ -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.
|
|
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,29 @@ export interface DemandsOptions {
|
|
|
370
382
|
*/
|
|
371
383
|
export declare class TrackReader {
|
|
372
384
|
private readonly eventsPath;
|
|
373
|
-
readonly contractVersion = "1.
|
|
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;
|
|
397
|
+
/**
|
|
398
|
+
* The window the LOG ITSELF carries: first recorded event → last recorded event (criterion 21). Both
|
|
399
|
+
* bounds are in the log and need no selector — "the whole log" IS a window, and a report that says
|
|
400
|
+
* `aucune fenêtre` is describing the absence of a flag, not the absence of a period. PURE (no clock):
|
|
401
|
+
* a caller that wants `now` as the upper bound injects it at its own boundary.
|
|
402
|
+
*/
|
|
403
|
+
logWindow(): {
|
|
404
|
+
from?: string;
|
|
405
|
+
to?: string;
|
|
406
|
+
events: number;
|
|
407
|
+
};
|
|
379
408
|
/**
|
|
380
409
|
* Every decision plus its stored dossier, derived from ONE folded state. This is deliberately separate
|
|
381
410
|
* from `canevas`: callers listing an uncapped decision set must not replay the entire log once per row.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK/E,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK/E,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC5F,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAmB,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAEhG,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAErE,OAAO,EAA2C,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC1G,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACX,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAA+C,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC3F,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAClF,OAAO,EAAiB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAE5F;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,WAAW,CAAA;AAE7C,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,MAAM,MAAM,qBAAqB,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAA;AAE/G,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,eAAe,GACf,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,UAAU,CAAA;AAEd,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,qBAAqB,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,gBAAgB,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,qBAAqB,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,gBAAgB,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CAKlF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAezE;AAgCD;;;;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;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,sBAAsB,GACtB,kBAAkB,GAClB,kBAAkB,GAClB,WAAW,GAIX,yBAAyB,GAEzB,qBAAqB,CAAA;AAEzB,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAA;IAC5C,WAAW,EAAE,WAAW,CAAA;CACzB;AAED,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;;;;OAIG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,wGAAwG;IACxG,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,kGAAkG;IAClG,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAA;CAChC;AAED,wGAAwG;AACxG,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAA;CACf;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;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;CACjB;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,gHAAgH;AAChH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,0GAA0G;IAC1G,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;CAC9B;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;IACpB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;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,6FAA6F;AAC7F,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,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;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAA;AAExF,yGAAyG;AACzG,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sGAAsG;IACtG,SAAS,EAAE,eAAe,CAAA;CAC3B;AAED,2GAA2G;AAC3G,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,iHAAiH;IACjH,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,wBAAwB,EAAE,CAAA;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iGAAiG;IACjG,MAAM,EAAE,gBAAgB,CAAA;IACxB,QAAQ,EAAE,yBAAyB,EAAE,CAAA;CACtC;AAqDD,0GAA0G;AAC1G,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,QAAQ,CAAA;IACZ,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,SAAS,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,4FAA4F;IAC5F,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0GAA0G;IAC1G,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,uGAAuG;IACvG,UAAU,EAAE,UAAU,CAAA;IACtB,0FAA0F;IAC1F,WAAW,EAAE,aAAa,EAAE,CAAA;CAC7B;AAyCD,2GAA2G;AAC3G,MAAM,MAAM,eAAe,GAAG,eAAe,CAAA;AAsB7C;;;;;;GAMG;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,qGAAqG;IACrG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kGAAkG;IAClG,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,EAAE,aAAa,CAAA;IACnB,6FAA6F;IAC7F,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,gGAAgG;AAChG,MAAM,WAAW,cAAc;IAC7B,wGAAwG;IACxG,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB,4GAA4G;IAC5G,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,UAAU;IAHvC,QAAQ,CAAC,eAAe,YAAwB;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;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc;IAgBtD;;;;;OAKG;IACH,SAAS,IAAI;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAW3D;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,kBAAkB,EAAE;IAM1G,qGAAqG;IACrG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,UAAU;IAI9C,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,6EAA6E;IAC7E,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB;IAY5D;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,WAAW;IAqF7D;;;;OAIG;IACH,KAAK,IAAI,YAAY,EAAE;IAIvB;;;;;;;OAOG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE;IA2BpD;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE;IAoC9D;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,EAAE;IA2B1D,qGAAqG;IACrG,OAAO,CAAC,UAAU;IAKlB;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,EAAE;IAOxE;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IA+B1E,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;IAoIvF,+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"}
|
package/dist/read/contract.js
CHANGED
|
@@ -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.
|
|
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,43 @@ export class TrackReader {
|
|
|
213
217
|
}
|
|
214
218
|
/** Bucketed backlog report (SPEC §7). */
|
|
215
219
|
report(options) {
|
|
216
|
-
return
|
|
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
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* The window the LOG ITSELF carries: first recorded event → last recorded event (criterion 21). Both
|
|
244
|
+
* bounds are in the log and need no selector — "the whole log" IS a window, and a report that says
|
|
245
|
+
* `aucune fenêtre` is describing the absence of a flag, not the absence of a period. PURE (no clock):
|
|
246
|
+
* a caller that wants `now` as the upper bound injects it at its own boundary.
|
|
247
|
+
*/
|
|
248
|
+
logWindow() {
|
|
249
|
+
const events = this.events();
|
|
250
|
+
const first = events[0]?.at;
|
|
251
|
+
const last = events[events.length - 1]?.at;
|
|
252
|
+
return {
|
|
253
|
+
...(first !== undefined ? { from: first } : {}),
|
|
254
|
+
...(last !== undefined ? { to: last } : {}),
|
|
255
|
+
events: events.length,
|
|
256
|
+
};
|
|
217
257
|
}
|
|
218
258
|
/**
|
|
219
259
|
* Every decision plus its stored dossier, derived from ONE folded state. This is deliberately separate
|