@sentropic/track 0.10.10 → 0.11.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 +56 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/events/types.d.ts +2 -2
- package/dist/events/types.d.ts.map +1 -1
- package/dist/events/types.js +10 -1
- package/dist/events/types.js.map +1 -1
- package/dist/ingest/contract.d.ts +2 -1
- package/dist/ingest/contract.d.ts.map +1 -1
- package/dist/ingest/contract.js +19 -0
- package/dist/ingest/contract.js.map +1 -1
- package/dist/ingest/ingest.d.ts.map +1 -1
- package/dist/ingest/ingest.js +18 -0
- package/dist/ingest/ingest.js.map +1 -1
- package/dist/ingest/map.d.ts.map +1 -1
- package/dist/ingest/map.js +6 -0
- package/dist/ingest/map.js.map +1 -1
- package/dist/mcp/server.d.ts +34 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +33 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +2 -0
- package/dist/model/index.js.map +1 -1
- package/dist/model/verification.d.ts +38 -0
- package/dist/model/verification.d.ts.map +1 -0
- package/dist/model/verification.js +52 -0
- package/dist/model/verification.js.map +1 -0
- package/dist/read/commands.d.ts +7 -0
- package/dist/read/commands.d.ts.map +1 -1
- package/dist/read/commands.js +18 -0
- package/dist/read/commands.js.map +1 -1
- package/dist/read/contract.d.ts +17 -2
- package/dist/read/contract.d.ts.map +1 -1
- package/dist/read/contract.js +24 -1
- package/dist/read/contract.js.map +1 -1
- package/dist/read/index.d.ts +2 -0
- package/dist/read/index.d.ts.map +1 -1
- package/dist/read/index.js +3 -0
- package/dist/read/index.js.map +1 -1
- package/dist/report/index.d.ts +2 -1
- package/dist/report/index.d.ts.map +1 -1
- package/dist/report/index.js +3 -1
- package/dist/report/index.js.map +1 -1
- package/dist/report/rollup.d.ts +10 -0
- package/dist/report/rollup.d.ts.map +1 -1
- package/dist/report/rollup.js +23 -18
- package/dist/report/rollup.js.map +1 -1
- package/dist/report/status-by-level.d.ts +27 -0
- package/dist/report/status-by-level.d.ts.map +1 -0
- package/dist/report/status-by-level.js +149 -0
- package/dist/report/status-by-level.js.map +1 -0
- package/dist/state/fold.d.ts +7 -0
- package/dist/state/fold.d.ts.map +1 -1
- package/dist/state/fold.js +18 -0
- package/dist/state/fold.js.map +1 -1
- package/dist/state/snapshot.d.ts +2 -0
- package/dist/state/snapshot.d.ts.map +1 -1
- package/dist/state/snapshot.js +2 -0
- package/dist/state/snapshot.js.map +1 -1
- package/dist/track.d.ts +15 -0
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +25 -0
- package/dist/track.js.map +1 -1
- package/package.json +1 -1
package/dist/mcp/server.js
CHANGED
|
@@ -9,7 +9,7 @@ import { join } from 'node:path';
|
|
|
9
9
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
10
10
|
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
11
11
|
import { resolveTrackDirOrNull } from '../cli/resolve.js';
|
|
12
|
-
import { queryText, reportText } from '../read/commands.js';
|
|
12
|
+
import { queryText, reportText, statusText } from '../read/commands.js';
|
|
13
13
|
import { TrackReader } from '../read/contract.js';
|
|
14
14
|
import { VERSION } from '../version.js';
|
|
15
15
|
// Allowed enum values — the single source for BOTH the advertised schema and runtime validation.
|
|
@@ -18,6 +18,7 @@ const ROLES = ['workpackage']; // Workpackages §2 — container marker filter
|
|
|
18
18
|
const BUCKETS = ['AWAITED', 'DROPPED', 'DONE', 'TO-DO'];
|
|
19
19
|
const REALIZATIONS = ['to-do', 'in-progress', 'done', 'cancelled', 'rejected'];
|
|
20
20
|
const ACCEPTANCES = ['pass', 'fail', 'unknown', 'stale', 'waived'];
|
|
21
|
+
const LEVELS = ['spec', 'plan', 'wp', 'lot', 'task']; // Scope §A/§B — status(level) tiers
|
|
21
22
|
/** Read-only tools, declared as plain JSON Schema (no zod) — the curated read contract over MCP. */
|
|
22
23
|
export const READ_TOOLS = [
|
|
23
24
|
{
|
|
@@ -78,6 +79,27 @@ export const READ_TOOLS = [
|
|
|
78
79
|
description: 'Open external (scope:extra) dependencies awaiting an h2a ENGAGEMENT, as JSON [{blockerId, targetId, engagementRef, openedAt}]. What an h2a bridge watches to resolve when an engagement settles.',
|
|
79
80
|
inputSchema: { type: 'object', properties: {} },
|
|
80
81
|
},
|
|
82
|
+
{
|
|
83
|
+
name: 'track_status',
|
|
84
|
+
description: 'status(level) projection (Scope §A/§B): rolls leaf buckets up to a scope tier {spec|plan|wp|lot|task}, as JSON {level, groups:[{id,title,label,depth,status,done,active,dropped,pct}]}. wp ≡ the computeWpTree forest; task = leaf buckets; lot|plan|spec = the same rollup over WP-nesting tiers (SUM not mean; dropped excluded; 0/0⇒n/a). Read-only.',
|
|
85
|
+
inputSchema: {
|
|
86
|
+
type: 'object',
|
|
87
|
+
properties: {
|
|
88
|
+
level: { type: 'string', enum: LEVELS, description: 'The scope tier to roll up to.' },
|
|
89
|
+
baselineCommit: { type: 'string', description: 'Commit AWAITED/acceptance are evaluated against.' },
|
|
90
|
+
requireAccepted: { type: 'boolean', description: 'A done leaf counts as DONE only if acceptance=pass.' },
|
|
91
|
+
},
|
|
92
|
+
required: ['level', 'baselineCommit'],
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'track_verification_runs',
|
|
97
|
+
description: 'Recorded path-scope VerificationRuns (Scope §B(c)) — the EVIDENCE a future `scope validate` reads, as JSON [{runId,runner,commit,env?,verdict,wpRef?,violations?,at}]. EVIDENCE-ONLY: a path verdict never becomes an item. `violations` are the harness verbatim offending paths (track never glob-matches). Optional `wpRef` filters to one WP/phase.',
|
|
98
|
+
inputSchema: {
|
|
99
|
+
type: 'object',
|
|
100
|
+
properties: { wpRef: { type: 'string', description: 'Filter to runs for this WP/phase item id.' } },
|
|
101
|
+
},
|
|
102
|
+
},
|
|
81
103
|
{
|
|
82
104
|
name: 'track_workspace_activity',
|
|
83
105
|
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).',
|
|
@@ -169,6 +191,16 @@ export function dispatchReadTool(reader, name, args) {
|
|
|
169
191
|
filter.acceptance = acceptance;
|
|
170
192
|
return queryText(reader, filter, { baselineCommit: reqStr(args, 'baselineCommit') }, 'json');
|
|
171
193
|
}
|
|
194
|
+
case 'track_status': {
|
|
195
|
+
const level = optEnum(args, 'level', LEVELS);
|
|
196
|
+
if (level === undefined)
|
|
197
|
+
throw new Error('tool argument "level" must be one of: ' + LEVELS.join(', '));
|
|
198
|
+
return statusText(reader, level, { baselineCommit: reqStr(args, 'baselineCommit'), requireAccepted: optBool(args, 'requireAccepted') ?? false }, 'json');
|
|
199
|
+
}
|
|
200
|
+
case 'track_verification_runs': {
|
|
201
|
+
const wpRef = optStr(args, 'wpRef');
|
|
202
|
+
return JSON.stringify(reader.verificationRuns(wpRef), null, 2);
|
|
203
|
+
}
|
|
172
204
|
case 'track_validate':
|
|
173
205
|
return JSON.stringify(reader.validate(), null, 2);
|
|
174
206
|
case 'track_external_deps':
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,8FAA8F;AAC9F,gGAAgG;AAChG,EAAE;AACF,+FAA+F;AAC/F,kGAAkG;AAClG,iFAAiF;AAEjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAElG,OAAO,EAAE,qBAAqB,EAAuB,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/model/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export { assertManualResolve, type BlockerKind, type BlockerOpenedPayload, type
|
|
|
3
3
|
export { assertDossierArtifact, assertOutcomeTransition, isSettled, type AddArtifactPayload, type ComprehensionEvidence, type DecisionCreatedPayload, type DecisionKind, type DecisionState, type Dossier, type DossierArtifact, type Option, type Outcome, type QAEntry, } from './decision.js';
|
|
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
|
+
export { assertVerificationRun, VERDICTS, type VerificationRecordedPayload, type VerificationRun, type Verdict, } from './verification.js';
|
|
6
7
|
//# 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,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,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"}
|
package/dist/model/index.js
CHANGED
|
@@ -4,4 +4,6 @@ export { assertManualResolve, } from './blocker.js';
|
|
|
4
4
|
export { assertDossierArtifact, assertOutcomeTransition, isSettled, } from './decision.js';
|
|
5
5
|
export {} from './acceptance.js';
|
|
6
6
|
export { WSJF_SCHEME_VERSION, wsjfScore, } from './priority.js';
|
|
7
|
+
// Scope §B(c) — path-scope verification evidence (the sibling of TestRun).
|
|
8
|
+
export { assertVerificationRun, VERDICTS, } from './verification.js';
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
package/dist/model/index.js.map
CHANGED
|
@@ -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,oBAAoB,GAYrB,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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,oBAAoB,GAYrB,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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ItemId } from './item.js';
|
|
2
|
+
/** The path verdict a harness computed. `severity→pass/fail` is the adapter's policy, not the contract. */
|
|
3
|
+
export type Verdict = 'clean' | 'violation' | 'conditional';
|
|
4
|
+
export declare const VERDICTS: readonly Verdict[];
|
|
5
|
+
/**
|
|
6
|
+
* A recorded path-scope verification (the sibling of {@link TestRun}). Evidence-only: it surfaces on
|
|
7
|
+
* the read contract for a future `scope validate` to read, but is INERT to bucketing/realization.
|
|
8
|
+
*/
|
|
9
|
+
export interface VerificationRun {
|
|
10
|
+
runId: string;
|
|
11
|
+
runner: string;
|
|
12
|
+
commit: string;
|
|
13
|
+
env?: string;
|
|
14
|
+
verdict: Verdict;
|
|
15
|
+
/** The WP/phase the verdict pertains to; absent ⇒ a workspace-scoped run. */
|
|
16
|
+
wpRef?: ItemId;
|
|
17
|
+
/** Offending paths, recorded VERBATIM (opaque locators) — track NEVER re-matches them. */
|
|
18
|
+
violations?: string[];
|
|
19
|
+
at: string;
|
|
20
|
+
}
|
|
21
|
+
/** The payload of a `scope.verification` WorkEvent / `scope.verification-recorded` event. */
|
|
22
|
+
export interface VerificationRecordedPayload {
|
|
23
|
+
runId: string;
|
|
24
|
+
runner: string;
|
|
25
|
+
commit: string;
|
|
26
|
+
env?: string;
|
|
27
|
+
verdict: Verdict;
|
|
28
|
+
wpRef?: ItemId;
|
|
29
|
+
violations?: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Fail-closed validation of a VerificationRun payload (mirrors `assertDossierArtifact`). The envelope
|
|
33
|
+
* schema only checks the flat fields (`runId`/`runner`/`commit`/`verdict` present, `env`/`wpRef`
|
|
34
|
+
* strings, `violations` a string[]); this asserts the verdict enum + that `violations` are all strings,
|
|
35
|
+
* and normalizes (drops absent optionals so the recorded shape is minimal + hash-stable).
|
|
36
|
+
*/
|
|
37
|
+
export declare function assertVerificationRun(input: unknown): VerificationRecordedPayload;
|
|
38
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/model/verification.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAEpD,2GAA2G;AAC3G,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,CAAA;AAC3D,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAA0C,CAAA;AAEjF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,6FAA6F;AAC7F,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAID;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,2BAA2B,CAiCjF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Scope §B(c) — the path-verdict sibling of TestRun (acceptance.run). A `VerificationRun` is the
|
|
2
|
+
// EVIDENCE a harness emits after checking a tree against scope path-globs. It is RECORD-ONLY: track
|
|
3
|
+
// NEVER does glob-matching — the offending paths in `violations` are recorded VERBATIM as opaque
|
|
4
|
+
// locators, never re-matched. A path verdict can NEVER spawn/advance/complete a TODO (structural
|
|
5
|
+
// guarantee: fold appends to its own evidence collection, touching no realization/bucket logic).
|
|
6
|
+
import { DomainError } from './item.js';
|
|
7
|
+
export const VERDICTS = ['clean', 'violation', 'conditional'];
|
|
8
|
+
const nonEmptyString = (v) => typeof v === 'string' && v.length > 0;
|
|
9
|
+
/**
|
|
10
|
+
* Fail-closed validation of a VerificationRun payload (mirrors `assertDossierArtifact`). The envelope
|
|
11
|
+
* schema only checks the flat fields (`runId`/`runner`/`commit`/`verdict` present, `env`/`wpRef`
|
|
12
|
+
* strings, `violations` a string[]); this asserts the verdict enum + that `violations` are all strings,
|
|
13
|
+
* and normalizes (drops absent optionals so the recorded shape is minimal + hash-stable).
|
|
14
|
+
*/
|
|
15
|
+
export function assertVerificationRun(input) {
|
|
16
|
+
if (typeof input !== 'object' || input === null || Array.isArray(input)) {
|
|
17
|
+
throw new DomainError('scope.verification: a verification run must be an object');
|
|
18
|
+
}
|
|
19
|
+
const a = input;
|
|
20
|
+
if (!nonEmptyString(a['runId']))
|
|
21
|
+
throw new DomainError('scope.verification: requires a runId');
|
|
22
|
+
if (!nonEmptyString(a['runner']))
|
|
23
|
+
throw new DomainError('scope.verification: requires a runner');
|
|
24
|
+
if (!nonEmptyString(a['commit']))
|
|
25
|
+
throw new DomainError('scope.verification: requires a commit');
|
|
26
|
+
if (typeof a['verdict'] !== 'string' || !VERDICTS.includes(a['verdict'])) {
|
|
27
|
+
throw new DomainError(`scope.verification: verdict must be one of ${VERDICTS.join('|')}`);
|
|
28
|
+
}
|
|
29
|
+
if (a['env'] !== undefined && typeof a['env'] !== 'string') {
|
|
30
|
+
throw new DomainError('scope.verification: env must be a string');
|
|
31
|
+
}
|
|
32
|
+
if (a['wpRef'] !== undefined && !nonEmptyString(a['wpRef'])) {
|
|
33
|
+
throw new DomainError('scope.verification: wpRef must be a non-empty item id');
|
|
34
|
+
}
|
|
35
|
+
let violations;
|
|
36
|
+
if (a['violations'] !== undefined) {
|
|
37
|
+
if (!Array.isArray(a['violations']) || !a['violations'].every((v) => typeof v === 'string')) {
|
|
38
|
+
throw new DomainError('scope.verification: violations must be a string[]');
|
|
39
|
+
}
|
|
40
|
+
violations = a['violations'];
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
runId: a['runId'],
|
|
44
|
+
runner: a['runner'],
|
|
45
|
+
commit: a['commit'],
|
|
46
|
+
verdict: a['verdict'],
|
|
47
|
+
...(a['env'] !== undefined ? { env: a['env'] } : {}),
|
|
48
|
+
...(a['wpRef'] !== undefined ? { wpRef: a['wpRef'] } : {}),
|
|
49
|
+
...(violations !== undefined ? { violations } : {}),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/model/verification.ts"],"names":[],"mappings":"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"}
|
package/dist/read/commands.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Format } from '../report/format.js';
|
|
2
2
|
import type { QueryFilter, ReportOptions } from '../report/build.js';
|
|
3
|
+
import type { StatusLevel } from '../report/status-by-level.js';
|
|
3
4
|
import type { TrackReader } from './contract.js';
|
|
4
5
|
/**
|
|
5
6
|
* `report` rendered exactly as the CLI renders it (SPEC §7).
|
|
@@ -11,6 +12,12 @@ import type { TrackReader } from './contract.js';
|
|
|
11
12
|
* `wpTree` plus the global `wpTotals` so a conductor can render programmatically.
|
|
12
13
|
*/
|
|
13
14
|
export declare function reportText(reader: TrackReader, options: ReportOptions, format: Format): string;
|
|
15
|
+
/**
|
|
16
|
+
* `report --level <spec|plan|wp|lot|task>` rendered (Scope §A/§B). `json` carries the structured status
|
|
17
|
+
* groups; `text`/`md` render a one-line-per-group `done/active (pct) STATUS label — title` table. Pure
|
|
18
|
+
* read over the shared `TrackReader.statusByLevel` (same path the MCP surface uses).
|
|
19
|
+
*/
|
|
20
|
+
export declare function statusText(reader: TrackReader, level: StatusLevel, options: ReportOptions, format: Format): string;
|
|
14
21
|
/** `query` rendered exactly as the CLI renders it: raw JSON for `json`, else the row formatter. */
|
|
15
22
|
export declare function queryText(reader: TrackReader, filter: QueryFilter, options: ReportOptions, format: Format): string;
|
|
16
23
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/read/commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAAyD,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACxG,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAa9F;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,EAAyD,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACxG,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;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAa9F;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
|
@@ -24,6 +24,24 @@ export function reportText(reader, options, format) {
|
|
|
24
24
|
}
|
|
25
25
|
return formatReport(report, format);
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* `report --level <spec|plan|wp|lot|task>` rendered (Scope §A/§B). `json` carries the structured status
|
|
29
|
+
* groups; `text`/`md` render a one-line-per-group `done/active (pct) STATUS label — title` table. Pure
|
|
30
|
+
* read over the shared `TrackReader.statusByLevel` (same path the MCP surface uses).
|
|
31
|
+
*/
|
|
32
|
+
export function statusText(reader, level, options, format) {
|
|
33
|
+
const groups = reader.statusByLevel(level, options);
|
|
34
|
+
if (format === 'json')
|
|
35
|
+
return `${JSON.stringify({ level, groups }, null, 2)}\n`;
|
|
36
|
+
const head = `# status — level: ${level}\n`;
|
|
37
|
+
const body = groups
|
|
38
|
+
.map((g) => {
|
|
39
|
+
const pct = g.pct === 'n/a' ? 'n/a' : `${g.pct}%`;
|
|
40
|
+
return `${g.label} ${g.done}/${g.active} (${pct}) ${g.status}${g.dropped > 0 ? ` [${g.dropped} dropped]` : ''} — ${g.title}`;
|
|
41
|
+
})
|
|
42
|
+
.join('\n');
|
|
43
|
+
return `${head}${body}${groups.length > 0 ? '\n' : ''}`;
|
|
44
|
+
}
|
|
27
45
|
/** `query` rendered exactly as the CLI renders it: raw JSON for `json`, else the row formatter. */
|
|
28
46
|
export function queryText(reader, filter, options, format) {
|
|
29
47
|
const rows = reader.query(filter, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/read/commands.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,qGAAqG;AACrG,qGAAqG;AACrG,iEAAiE;AAEjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAe,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/read/commands.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,qGAAqG;AACrG,qGAAqG;AACrG,iEAAiE;AAEjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAe,MAAM,qBAAqB,CAAA;AAKxG;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,OAAsB,EAAE,MAAc;IACpF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAErC,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,4FAA4F;YAC5F,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;QACzF,CAAC;QACD,2DAA2D;QAC3D,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,MAAmB,EACnB,KAAkB,EAClB,OAAsB,EACtB,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACnD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;IAC/E,MAAM,IAAI,GAAG,qBAAqB,KAAK,IAAI,CAAA;IAC3C,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;QACjD,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;IAChI,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACzD,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,SAAS,CACvB,MAAmB,EACnB,MAAmB,EACnB,OAAsB,EACtB,MAAc;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAC5F,CAAC"}
|
package/dist/read/contract.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Sha256 } from '../events/types.js';
|
|
2
2
|
import { type IntegrityResult } from '../events/validate.js';
|
|
3
3
|
import type { ItemId } from '../model/item.js';
|
|
4
|
+
import type { VerificationRun } from '../model/verification.js';
|
|
5
|
+
import { type StatusGroup, type StatusLevel } from '../report/status-by-level.js';
|
|
4
6
|
import { type QueryFilter, type Report, type ReportOptions, type ReportRow } from '../report/build.js';
|
|
5
7
|
/**
|
|
6
8
|
* Semver of the skill-facing READ contract.
|
|
@@ -9,7 +11,7 @@ import { type QueryFilter, type Report, type ReportOptions, type ReportRow } fro
|
|
|
9
11
|
* shapes it returns may only GROW (new methods / new optional fields); nothing is removed or
|
|
10
12
|
* repurposed without a major bump. Consumers gate on `reader.contractVersion`.
|
|
11
13
|
*/
|
|
12
|
-
export declare const READ_CONTRACT_VERSION = "1.
|
|
14
|
+
export declare const READ_CONTRACT_VERSION = "1.5.0";
|
|
13
15
|
/** Provenance of the last `branch.imported` for a locator (drawn from the raw event log). */
|
|
14
16
|
export interface BranchProvenance {
|
|
15
17
|
locator: string;
|
|
@@ -94,7 +96,7 @@ export interface WorkspaceActivityOptions {
|
|
|
94
96
|
*/
|
|
95
97
|
export declare class TrackReader {
|
|
96
98
|
private readonly eventsPath;
|
|
97
|
-
readonly contractVersion = "1.
|
|
99
|
+
readonly contractVersion = "1.5.0";
|
|
98
100
|
private readonly store;
|
|
99
101
|
constructor(eventsPath: string);
|
|
100
102
|
private events;
|
|
@@ -102,6 +104,12 @@ export declare class TrackReader {
|
|
|
102
104
|
report(options: ReportOptions): Report;
|
|
103
105
|
/** Flat, filtered query over report rows (SPEC §6). */
|
|
104
106
|
query(filter: QueryFilter, options: ReportOptions): ReportRow[];
|
|
107
|
+
/**
|
|
108
|
+
* Scope §A/§B — `status(level)` projection (spec|plan|wp|lot|task). Additive read-only generalization
|
|
109
|
+
* of `computeWpTree`+`bucketOf`; adds no aggregate, no stored status axis. `requireAccepted` (default
|
|
110
|
+
* false) and `baselineCommit` govern the underlying leaf buckets exactly as in `report`.
|
|
111
|
+
*/
|
|
112
|
+
statusByLevel(level: StatusLevel, options: ReportOptions): StatusGroup[];
|
|
105
113
|
/** Recompute the integrity chain (SPEC §3) — pure detector, never repairs. */
|
|
106
114
|
validate(): IntegrityResult;
|
|
107
115
|
/**
|
|
@@ -110,6 +118,13 @@ export declare class TrackReader {
|
|
|
110
118
|
* Baseline-free (an external dep resolves only by an explicit event, never commit-relative).
|
|
111
119
|
*/
|
|
112
120
|
externalDependencies(): ExternalDependency[];
|
|
121
|
+
/**
|
|
122
|
+
* Scope §B(c) — the recorded path-scope VerificationRuns (the read surface a future `scope validate`
|
|
123
|
+
* reads, never recomputes). EVIDENCE-ONLY: each is the latest-per-runId verdict folded from the log;
|
|
124
|
+
* track NEVER glob-matches — `violations` are the harness's verbatim offending paths. `wpRef` filters
|
|
125
|
+
* to one WP/phase; absent ⇒ all runs (workspace-scoped + wpRef'd). Sorted by `at` then `runId`.
|
|
126
|
+
*/
|
|
127
|
+
verificationRuns(wpRef?: ItemId): VerificationRun[];
|
|
113
128
|
/**
|
|
114
129
|
* Poll-able activity signal for ONE workspace (h2a conductor-launch gating). PURE: `now`/`idleMs`
|
|
115
130
|
* are caller-supplied (track holds no clock). Reads the log ONCE; `pending`/staleness reuse the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/read/contract.js
CHANGED
|
@@ -12,6 +12,7 @@ import { readHead } from '../events/head.js';
|
|
|
12
12
|
import { EventStore } from '../events/store.js';
|
|
13
13
|
import { validate } from '../events/validate.js';
|
|
14
14
|
import { bucketOf } from '../report/buckets.js';
|
|
15
|
+
import { statusByLevel } from '../report/status-by-level.js';
|
|
15
16
|
import { effectiveOpenBlockersForItem } from '../report/blocker-status.js';
|
|
16
17
|
import { buildReport, query as runQuery, } from '../report/build.js';
|
|
17
18
|
import { fold } from '../state/fold.js';
|
|
@@ -22,7 +23,7 @@ import { fold } from '../state/fold.js';
|
|
|
22
23
|
* shapes it returns may only GROW (new methods / new optional fields); nothing is removed or
|
|
23
24
|
* repurposed without a major bump. Consumers gate on `reader.contractVersion`.
|
|
24
25
|
*/
|
|
25
|
-
export const READ_CONTRACT_VERSION = '1.
|
|
26
|
+
export const READ_CONTRACT_VERSION = '1.5.0'; // +verificationRuns() evidence read + statusByLevel() projection (Scope §A/§B, additive)
|
|
26
27
|
/** Thrown by `requireFresh` when the sidecar is unsafe to consume (stale, absent, or tampered). */
|
|
27
28
|
export class StaleSidecarError extends Error {
|
|
28
29
|
detail;
|
|
@@ -58,6 +59,17 @@ export class TrackReader {
|
|
|
58
59
|
query(filter, options) {
|
|
59
60
|
return runQuery(fold(this.events()), filter, options);
|
|
60
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Scope §A/§B — `status(level)` projection (spec|plan|wp|lot|task). Additive read-only generalization
|
|
64
|
+
* of `computeWpTree`+`bucketOf`; adds no aggregate, no stored status axis. `requireAccepted` (default
|
|
65
|
+
* false) and `baselineCommit` govern the underlying leaf buckets exactly as in `report`.
|
|
66
|
+
*/
|
|
67
|
+
statusByLevel(level, options) {
|
|
68
|
+
return statusByLevel(fold(this.events()), level, {
|
|
69
|
+
baselineCommit: options.baselineCommit,
|
|
70
|
+
requireAccepted: options.requireAccepted ?? false,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
61
73
|
/** Recompute the integrity chain (SPEC §3) — pure detector, never repairs. */
|
|
62
74
|
validate() {
|
|
63
75
|
return validate(this.events(), readHead(this.eventsPath));
|
|
@@ -77,6 +89,17 @@ export class TrackReader {
|
|
|
77
89
|
}
|
|
78
90
|
return out;
|
|
79
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Scope §B(c) — the recorded path-scope VerificationRuns (the read surface a future `scope validate`
|
|
94
|
+
* reads, never recomputes). EVIDENCE-ONLY: each is the latest-per-runId verdict folded from the log;
|
|
95
|
+
* track NEVER glob-matches — `violations` are the harness's verbatim offending paths. `wpRef` filters
|
|
96
|
+
* to one WP/phase; absent ⇒ all runs (workspace-scoped + wpRef'd). Sorted by `at` then `runId`.
|
|
97
|
+
*/
|
|
98
|
+
verificationRuns(wpRef) {
|
|
99
|
+
const runs = [...fold(this.events()).verificationRuns.values()];
|
|
100
|
+
const filtered = wpRef !== undefined ? runs.filter((r) => r.wpRef === wpRef) : runs;
|
|
101
|
+
return filtered.sort((a, b) => a.at.localeCompare(b.at) || a.runId.localeCompare(b.runId));
|
|
102
|
+
}
|
|
80
103
|
/**
|
|
81
104
|
* Poll-able activity signal for ONE workspace (h2a conductor-launch gating). PURE: `now`/`idleMs`
|
|
82
105
|
* are caller-supplied (track holds no clock). Reads the log ONCE; `pending`/staleness reuse the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,iGAAiG;AACjG,4FAA4F;AAC5F,iGAAiG;AACjG,8FAA8F;AAC9F,0FAA0F;AAC1F,qBAAqB;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,OAAO,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/read/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/read/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { READ_CONTRACT_VERSION, StaleSidecarError, TrackReader, type BranchProvenance, type ExternalDependency, type Freshness, type StalledItem, type StalledReason, type WorkspaceActivity, type WorkspaceActivityOptions, } from './contract.js';
|
|
2
|
+
export { type GroupStatus, type StatusGroup, type StatusLevel } from '../report/status-by-level.js';
|
|
3
|
+
export { type VerificationRun, type Verdict } from '../model/verification.js';
|
|
2
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/read/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/read/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/read/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACnG,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAA"}
|
package/dist/read/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
// Read contract barrel (Lot v2.0) — the skill-facing, versioned, read-only surface.
|
|
2
2
|
export { READ_CONTRACT_VERSION, StaleSidecarError, TrackReader, } from './contract.js';
|
|
3
|
+
// Scope §A/§B — projection/evidence types re-exported for skill consumers of the read contract.
|
|
4
|
+
export {} from '../report/status-by-level.js';
|
|
5
|
+
export {} from '../model/verification.js';
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
package/dist/read/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/read/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,GAQZ,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/read/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,GAQZ,MAAM,eAAe,CAAA;AACtB,gGAAgG;AAChG,OAAO,EAAwD,MAAM,8BAA8B,CAAA;AACnG,OAAO,EAAsC,MAAM,0BAA0B,CAAA"}
|
package/dist/report/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { BUCKETS, bucketOf, type Bucket, type ReportConfig } from './buckets.js';
|
|
2
2
|
export { buildReport, query, type DecisionRow, type QueryFilter, type Report, type ReportOptions, type ReportRow, } from './build.js';
|
|
3
3
|
export { formatReport, formatRows, formatWpConductor, formatWpTree, wpTotals, type Format, type WpTotals, } from './format.js';
|
|
4
|
-
export { computeWpTree, type WpLeaf, type WpNode } from './rollup.js';
|
|
4
|
+
export { computeWpTree, tally, type WpLeaf, type WpNode } from './rollup.js';
|
|
5
|
+
export { statusByLevel, STATUS_LEVELS, type GroupStatus, type StatusGroup, type StatusLevel, } from './status-by-level.js';
|
|
5
6
|
export { effectiveBlockerOpen, effectiveOpenBlockersForItem } from './blocker-status.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EACL,WAAW,EACX,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,KAAK,MAAM,EACX,KAAK,QAAQ,GACd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EACL,WAAW,EACX,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,KAAK,MAAM,EACX,KAAK,QAAQ,GACd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAE5E,OAAO,EACL,aAAa,EACb,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/report/index.js
CHANGED
|
@@ -3,7 +3,9 @@ export { BUCKETS, bucketOf } from './buckets.js';
|
|
|
3
3
|
export { buildReport, query, } from './build.js';
|
|
4
4
|
export { formatReport, formatRows, formatWpConductor, formatWpTree, wpTotals, } from './format.js';
|
|
5
5
|
// Workpackages §2 — the %-by-WP rollup forest (pure).
|
|
6
|
-
export { computeWpTree } from './rollup.js';
|
|
6
|
+
export { computeWpTree, tally } from './rollup.js';
|
|
7
|
+
// Scope §A/§B — status(level) projection (spec|plan|wp|lot|task), additive read-only.
|
|
8
|
+
export { statusByLevel, STATUS_LEVELS, } from './status-by-level.js';
|
|
7
9
|
// Commit-relative blocker openness (v2.2a hybrid-A) — `linked-accepted` derived at projection time.
|
|
8
10
|
export { effectiveBlockerOpen, effectiveOpenBlockersForItem } from './blocker-status.js';
|
|
9
11
|
//# sourceMappingURL=index.js.map
|
package/dist/report/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAkC,MAAM,cAAc,CAAA;AAChF,OAAO,EACL,WAAW,EACX,KAAK,GAMN,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,QAAQ,GAGT,MAAM,aAAa,CAAA;AACpB,sDAAsD;AACtD,OAAO,EAAE,aAAa,EAA4B,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAkC,MAAM,cAAc,CAAA;AAChF,OAAO,EACL,WAAW,EACX,KAAK,GAMN,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,QAAQ,GAGT,MAAM,aAAa,CAAA;AACpB,sDAAsD;AACtD,OAAO,EAAE,aAAa,EAAE,KAAK,EAA4B,MAAM,aAAa,CAAA;AAC5E,sFAAsF;AACtF,OAAO,EACL,aAAa,EACb,aAAa,GAId,MAAM,sBAAsB,CAAA;AAC7B,oGAAoG;AACpG,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/report/rollup.d.ts
CHANGED
|
@@ -30,6 +30,16 @@ export interface WpNode {
|
|
|
30
30
|
leaves: WpLeaf[];
|
|
31
31
|
children: WpNode[];
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Tally leaf buckets into done/active/dropped counts (the % numerator/denominator). DONE counts in both
|
|
35
|
+
* done and active; TO-DO/AWAITED count active only; DROPPED is shown but EXCLUDED from the denominator.
|
|
36
|
+
* Exported so `statusByLevel` rolls up tiers with the SAME arithmetic (no Simpson mean-of-pcts trap).
|
|
37
|
+
*/
|
|
38
|
+
export declare function tally(leaves: readonly WpLeaf[]): {
|
|
39
|
+
done: number;
|
|
40
|
+
active: number;
|
|
41
|
+
dropped: number;
|
|
42
|
+
};
|
|
33
43
|
/**
|
|
34
44
|
* Build the WP forest and roll leaf buckets up. A WP's transitive NON-WP descendants are its leaves;
|
|
35
45
|
* a nested WP is a sub-node, not a leaf, so its leaves count once at every ancestor (SUM, not mean).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/report/rollup.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAGvE,oGAAoG;AACpG,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,gGAAgG;IAChG,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,wGAAwG;AACxG,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAA;IACnB,8GAA8G;IAC9G,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAOD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/report/rollup.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAGvE,oGAAoG;AACpG,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,gGAAgG;IAChG,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,wGAAwG;AACxG,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAA;IACnB,8GAA8G;IAC9G,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAOD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAelG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAsF1E"}
|
package/dist/report/rollup.js
CHANGED
|
@@ -13,6 +13,29 @@ import { effectiveOpenBlockersForItem } from './blocker-status.js';
|
|
|
13
13
|
function isWp(item) {
|
|
14
14
|
return item.role === 'workpackage';
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Tally leaf buckets into done/active/dropped counts (the % numerator/denominator). DONE counts in both
|
|
18
|
+
* done and active; TO-DO/AWAITED count active only; DROPPED is shown but EXCLUDED from the denominator.
|
|
19
|
+
* Exported so `statusByLevel` rolls up tiers with the SAME arithmetic (no Simpson mean-of-pcts trap).
|
|
20
|
+
*/
|
|
21
|
+
export function tally(leaves) {
|
|
22
|
+
let done = 0;
|
|
23
|
+
let active = 0;
|
|
24
|
+
let dropped = 0;
|
|
25
|
+
for (const l of leaves) {
|
|
26
|
+
if (l.bucket === 'DONE') {
|
|
27
|
+
done++;
|
|
28
|
+
active++;
|
|
29
|
+
}
|
|
30
|
+
else if (l.bucket === 'TO-DO' || l.bucket === 'AWAITED') {
|
|
31
|
+
active++;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
dropped++; // DROPPED — shown, excluded from %
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { done, active, dropped };
|
|
38
|
+
}
|
|
16
39
|
/**
|
|
17
40
|
* Build the WP forest and roll leaf buckets up. A WP's transitive NON-WP descendants are its leaves;
|
|
18
41
|
* a nested WP is a sub-node, not a leaf, so its leaves count once at every ancestor (SUM, not mean).
|
|
@@ -29,24 +52,6 @@ export function computeWpTree(state, config) {
|
|
|
29
52
|
}
|
|
30
53
|
for (const list of childrenOf.values())
|
|
31
54
|
list.sort((a, b) => a.id.localeCompare(b.id));
|
|
32
|
-
const tally = (leaves) => {
|
|
33
|
-
let done = 0;
|
|
34
|
-
let active = 0;
|
|
35
|
-
let dropped = 0;
|
|
36
|
-
for (const l of leaves) {
|
|
37
|
-
if (l.bucket === 'DONE') {
|
|
38
|
-
done++;
|
|
39
|
-
active++;
|
|
40
|
-
}
|
|
41
|
-
else if (l.bucket === 'TO-DO' || l.bucket === 'AWAITED') {
|
|
42
|
-
active++;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
dropped++; // DROPPED — shown, excluded from %
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return { done, active, dropped };
|
|
49
|
-
};
|
|
50
55
|
// Collect every NON-WP leaf descendant of `node`, but STOP at a nested sub-WP boundary (those leaves
|
|
51
56
|
// belong to the sub-WP's own node). A non-WP container (e.g. a feature with chore children) is descended
|
|
52
57
|
// through — it is not itself a leaf. This is the set "directly attached" at `node`.
|