@specforge/canary-cli 0.2.3 → 0.2.5
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/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/transport/__tests__/remote.test.d.ts +2 -0
- package/dist/transport/__tests__/remote.test.d.ts.map +1 -0
- package/dist/transport/remote.d.ts.map +1 -1
- package/dist/transport/remote.js +23 -4
- package/dist/transport/remote.js.map +1 -1
- package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.d.ts.map +1 -1
- package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts +1 -1
- package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts.map +1 -1
- package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts +1 -1
- package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts.map +1 -1
- package/node_modules/@specforge/api-types/package.json +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts +57 -1
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js +25 -1
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts +3 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.js +5 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts +18 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/schema/work-session.js +14 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session.js.map +1 -1
- package/node_modules/@specforge/session-types/package.json +1 -1
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts +7 -1
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts.map +1 -1
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js +7 -1
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js.map +1 -1
- package/node_modules/@specforge/spec-types/package.json +1 -1
- package/package.json +7 -7
package/dist/transport/remote.js
CHANGED
|
@@ -6,6 +6,18 @@ import {
|
|
|
6
6
|
} from "./resolve-endpoint.js";
|
|
7
7
|
const DEFAULT_TIMEOUT = 3e4;
|
|
8
8
|
const MCP_CACHE_KEY = "mcp-endpoint-cache";
|
|
9
|
+
function safeUrl(u) {
|
|
10
|
+
try {
|
|
11
|
+
return new URL(u);
|
|
12
|
+
} catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function isChannelHost(apiUrl) {
|
|
17
|
+
const h = safeUrl(apiUrl)?.host;
|
|
18
|
+
if (!h) return false;
|
|
19
|
+
return h === safeUrl(CHANNEL.endpoint.primary)?.host || h === safeUrl(CHANNEL.endpoint.fallback)?.host;
|
|
20
|
+
}
|
|
9
21
|
class RemoteTransport {
|
|
10
22
|
config;
|
|
11
23
|
/** Resolved URL pinned for this transport instance after the first call. */
|
|
@@ -20,15 +32,22 @@ class RemoteTransport {
|
|
|
20
32
|
*/
|
|
21
33
|
async pickUrl() {
|
|
22
34
|
if (this.resolvedUrl) return this.resolvedUrl;
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
35
|
+
const apiUrl = safeUrl(this.config.apiUrl);
|
|
36
|
+
if (!apiUrl || !isChannelHost(this.config.apiUrl)) {
|
|
25
37
|
this.resolvedUrl = this.config.apiUrl;
|
|
26
38
|
return this.resolvedUrl;
|
|
27
39
|
}
|
|
28
|
-
|
|
40
|
+
const resolvedBase = await resolveEndpoint({
|
|
29
41
|
...CHANNEL.endpoint,
|
|
30
42
|
cacheKey: MCP_CACHE_KEY
|
|
31
43
|
});
|
|
44
|
+
const resolved = safeUrl(resolvedBase);
|
|
45
|
+
if (resolved && apiUrl) {
|
|
46
|
+
resolved.pathname = apiUrl.pathname;
|
|
47
|
+
this.resolvedUrl = resolved.toString().replace(/\/$/, "");
|
|
48
|
+
} else {
|
|
49
|
+
this.resolvedUrl = resolvedBase;
|
|
50
|
+
}
|
|
32
51
|
if (this.config.debug) {
|
|
33
52
|
console.log(`[RemoteTransport] Resolved MCP endpoint: ${this.resolvedUrl}`);
|
|
34
53
|
}
|
|
@@ -59,7 +78,7 @@ class RemoteTransport {
|
|
|
59
78
|
});
|
|
60
79
|
clearTimeout(timeoutId);
|
|
61
80
|
if (!response.ok) {
|
|
62
|
-
if (shouldInvalidateOnStatus(response.status) && this.config.apiUrl
|
|
81
|
+
if (shouldInvalidateOnStatus(response.status) && isChannelHost(this.config.apiUrl)) {
|
|
63
82
|
await invalidate(MCP_CACHE_KEY);
|
|
64
83
|
this.resolvedUrl = null;
|
|
65
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/transport/remote.ts"],"sourcesContent":["/**\n * RemoteTransport — HTTP POST transport to SpecForge API Gateway\n *\n * Extracted from ApiClient.call() to implement ITransport.\n *\n * Endpoint resolution: when `config.apiUrl` matches `CHANNEL.endpoint.primary`\n * (i.e. no `SPECFORGE_API_URL` override is active), the transport delegates\n * to `resolveEndpoint` on the first call so the URL flows from the\n * canary-channel client probe (PLAN-canary-channel.md §D) — primary first,\n * fallback on DNS-class failure, cached for 5 min. On a 401/403 the cache\n * is invalidated so the next call re-probes.\n */\n\nimport type { ITransport, TransportOrigin } from './interface.js';\nimport { CHANNEL } from '../channel.js';\nimport {\n resolveEndpoint,\n invalidate,\n shouldInvalidateOnStatus,\n} from './resolve-endpoint.js';\n\nexport interface RemoteTransportConfig {\n apiUrl: string;\n apiKey: string;\n debug?: boolean;\n timeout?: number;\n /**\n * Calling context, sent as the `X-SpecForge-Origin` header (M9.7). Defaults to\n * `mcp` (agent traffic); the human CLI surface passes `cli`.\n */\n origin?: TransportOrigin;\n}\n\nconst DEFAULT_TIMEOUT = 30000;\nconst MCP_CACHE_KEY = 'mcp-endpoint-cache';\n\nexport class RemoteTransport implements ITransport {\n private config: RemoteTransportConfig;\n /** Resolved URL pinned for this transport instance after the first call. */\n private resolvedUrl: string | null = null;\n\n constructor(config: RemoteTransportConfig) {\n this.config = config;\n }\n\n /**\n * Pick the URL for this call. When `config.apiUrl` is the channel default,\n * defer to the resolver. Otherwise (env override / explicit test fixture),\n * use the configured URL directly.\n */\n private async pickUrl(): Promise<string> {\n if (this.resolvedUrl) return this.resolvedUrl;\n
|
|
1
|
+
{"version":3,"sources":["../../src/transport/remote.ts"],"sourcesContent":["/**\n * RemoteTransport — HTTP POST transport to SpecForge API Gateway\n *\n * Extracted from ApiClient.call() to implement ITransport.\n *\n * Endpoint resolution: when `config.apiUrl` matches `CHANNEL.endpoint.primary`\n * (i.e. no `SPECFORGE_API_URL` override is active), the transport delegates\n * to `resolveEndpoint` on the first call so the URL flows from the\n * canary-channel client probe (PLAN-canary-channel.md §D) — primary first,\n * fallback on DNS-class failure, cached for 5 min. On a 401/403 the cache\n * is invalidated so the next call re-probes.\n */\n\nimport type { ITransport, TransportOrigin } from './interface.js';\nimport { CHANNEL } from '../channel.js';\nimport {\n resolveEndpoint,\n invalidate,\n shouldInvalidateOnStatus,\n} from './resolve-endpoint.js';\n\nexport interface RemoteTransportConfig {\n apiUrl: string;\n apiKey: string;\n debug?: boolean;\n timeout?: number;\n /**\n * Calling context, sent as the `X-SpecForge-Origin` header (M9.7). Defaults to\n * `mcp` (agent traffic); the human CLI surface passes `cli`.\n */\n origin?: TransportOrigin;\n}\n\nconst DEFAULT_TIMEOUT = 30000;\nconst MCP_CACHE_KEY = 'mcp-endpoint-cache';\n\n/** Parse a URL, returning null instead of throwing on malformed input. */\nfunction safeUrl(u: string): URL | null {\n try {\n return new URL(u);\n } catch {\n return null;\n }\n}\n\n/** True when `apiUrl` targets one of the channel's hosts (on any surface path). */\nfunction isChannelHost(apiUrl: string): boolean {\n const h = safeUrl(apiUrl)?.host;\n if (!h) return false;\n return (\n h === safeUrl(CHANNEL.endpoint.primary)?.host ||\n h === safeUrl(CHANNEL.endpoint.fallback)?.host\n );\n}\n\nexport class RemoteTransport implements ITransport {\n private config: RemoteTransportConfig;\n /** Resolved URL pinned for this transport instance after the first call. */\n private resolvedUrl: string | null = null;\n\n constructor(config: RemoteTransportConfig) {\n this.config = config;\n }\n\n /**\n * Pick the URL for this call. When `config.apiUrl` is the channel default,\n * defer to the resolver. Otherwise (env override / explicit test fixture),\n * use the configured URL directly.\n */\n private async pickUrl(): Promise<string> {\n if (this.resolvedUrl) return this.resolvedUrl;\n\n // Match the channel by HOST, not by exact URL. `createCliClient` rewrites the\n // default `/local` (MCP/agent) surface to `/cli` (human CLI), so an exact\n // `=== CHANNEL.endpoint.primary` check wrongly classified the CLI surface as\n // an \"override\" and skipped the resolver entirely — meaning `specforge login`\n // hit the dead primary with NO fallback. Comparing hosts makes BOTH surfaces\n // go through the primary→fallback probe.\n const apiUrl = safeUrl(this.config.apiUrl);\n if (!apiUrl || !isChannelHost(this.config.apiUrl)) {\n // A genuine override (env var / explicit test fixture) — use it verbatim.\n this.resolvedUrl = this.config.apiUrl;\n return this.resolvedUrl;\n }\n\n // Resolve the live host via the /health probes (primary → fallback), then\n // re-apply THIS transport's surface path (`/cli` or `/local`) onto the\n // resolved host so the fallback works on either surface.\n const resolvedBase = await resolveEndpoint({\n ...CHANNEL.endpoint,\n cacheKey: MCP_CACHE_KEY,\n });\n const resolved = safeUrl(resolvedBase);\n if (resolved && apiUrl) {\n resolved.pathname = apiUrl.pathname;\n this.resolvedUrl = resolved.toString().replace(/\\/$/, '');\n } else {\n this.resolvedUrl = resolvedBase;\n }\n if (this.config.debug) {\n console.log(`[RemoteTransport] Resolved MCP endpoint: ${this.resolvedUrl}`);\n }\n return this.resolvedUrl;\n }\n\n async execute<T = unknown>(\n operation: string,\n args: Record<string, unknown>\n ): Promise<T> {\n const timeout = this.config.timeout ?? DEFAULT_TIMEOUT;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n if (this.config.debug) {\n console.log(`[RemoteTransport] Calling operation: ${operation}`, {\n args: Object.keys(args),\n });\n }\n\n const url = await this.pickUrl();\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.config.apiKey}`,\n // M9.7: server-derived feedback/telemetry provenance. The backend\n // reads this header (never a request-body `source` field).\n 'X-SpecForge-Origin': this.config.origin ?? 'mcp',\n },\n body: JSON.stringify({ operation, args }),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n // Auth failures may indicate the channel was rotated under us;\n // invalidate so the next call re-probes.\n if (\n shouldInvalidateOnStatus(response.status) &&\n isChannelHost(this.config.apiUrl)\n ) {\n await invalidate(MCP_CACHE_KEY);\n this.resolvedUrl = null;\n }\n const errorText = await response.text();\n const statusMessage = getStatusMessage(response.status);\n throw new Error(\n `API request failed: ${response.status} ${statusMessage}\\n${errorText}`\n );\n }\n\n // Transport is a dumb pipe (M9, approach A): return the raw response body.\n // Response-shape interpretation lives in the consumer that owns the\n // contract — `ApiClient.call` unwraps the `/cli` `{ data } / { error }`\n // shape; the agent `/local` path interprets the M8 envelope itself.\n const body = (await response.json()) as T;\n\n if (this.config.debug) {\n console.log(`[RemoteTransport] Operation completed: ${operation}`);\n }\n\n return body;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(\n `Request timed out after ${timeout}ms for operation: ${operation}`\n );\n }\n throw error;\n }\n }\n}\n\nfunction getStatusMessage(status: number): string {\n const messages: Record<number, string> = {\n 400: 'Bad Request',\n 401: 'Unauthorized - Check your API key',\n 403: 'Forbidden - Insufficient permissions',\n 404: 'Not Found',\n 429: 'Too Many Requests - Rate limit exceeded',\n 500: 'Internal Server Error',\n 501: 'Not Implemented',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n 504: 'Gateway Timeout',\n };\n return messages[status] || 'Unknown Error';\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-envelope.d.ts","sourceRoot":"","sources":["../../src/mcp/lifecycle-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"lifecycle-envelope.d.ts","sourceRoot":"","sources":["../../src/mcp/lifecycle-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,oEAAoE;IACpE,aAAa,EAAE,qBAAqB,CAAC;CACtC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* estimatedMinutes, readiness, tags, createdAt, updatedAt
|
|
11
11
|
*/
|
|
12
12
|
export type EpicCategory = 'foundation' | 'functional' | 'non_functional' | 'verification';
|
|
13
|
-
export type EpicPlanningType = 'planning' | 'on_flight'
|
|
13
|
+
export type EpicPlanningType = 'planning' | 'on_flight';
|
|
14
14
|
export interface LookupEpicResult {
|
|
15
15
|
id: string;
|
|
16
16
|
epicNumber: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epic-record.d.ts","sourceRoot":"","sources":["../../src/runtime/epic-record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"epic-record.d.ts","sourceRoot":"","sources":["../../src/runtime/epic-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ export interface BatchLookupTicketResult {
|
|
|
26
26
|
status: string;
|
|
27
27
|
title: string;
|
|
28
28
|
}
|
|
29
|
-
export type TicketPlanningType = 'planning' | 'on_flight'
|
|
29
|
+
export type TicketPlanningType = 'planning' | 'on_flight';
|
|
30
30
|
export type TicketTypeEnum = 'implementation' | 'verification';
|
|
31
31
|
/**
|
|
32
32
|
* Object shapes stored in the `Ticket.codeReferences` / `Ticket.typeReferences`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket-record.d.ts","sourceRoot":"","sources":["../../src/runtime/ticket-record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"ticket-record.d.ts","sourceRoot":"","sources":["../../src/runtime/ticket-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@specforge/api-types",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.12",
|
|
4
4
|
"description": "Catch-all type contracts for SpecForge: entity types, store interfaces, derived views, and API-surface helpers that are not lifecycle session-types and not spec-domain types.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts
CHANGED
|
@@ -65,16 +65,25 @@ declare const CoherencePointSchema: z.ZodObject<{
|
|
|
65
65
|
score: z.ZodNumber;
|
|
66
66
|
workSessionId: z.ZodString;
|
|
67
67
|
triggerActionId: z.ZodString;
|
|
68
|
+
/**
|
|
69
|
+
* ML.1.5 — TRUE when this point's score is a VACUOUS 100 (nothing touched). The
|
|
70
|
+
* quality composite counts coherence toward `overall` ONLY over non-vacuous points, so
|
|
71
|
+
* a nothing-touched 100 no longer fabricates an earned score. Absent on legacy points →
|
|
72
|
+
* read as non-vacuous.
|
|
73
|
+
*/
|
|
74
|
+
vacuous: z.ZodOptional<z.ZodBoolean>;
|
|
68
75
|
}, "strip", z.ZodTypeAny, {
|
|
69
76
|
at: string;
|
|
70
77
|
score: number;
|
|
71
78
|
triggerActionId: string;
|
|
72
79
|
workSessionId: string;
|
|
80
|
+
vacuous?: boolean | undefined;
|
|
73
81
|
}, {
|
|
74
82
|
at: string;
|
|
75
83
|
score: number;
|
|
76
84
|
triggerActionId: string;
|
|
77
85
|
workSessionId: string;
|
|
86
|
+
vacuous?: boolean | undefined;
|
|
78
87
|
}>;
|
|
79
88
|
/** §2.6 #4 — test pass-rate tally (per ImplementationSession). */
|
|
80
89
|
declare const TestPassRateSchema: z.ZodObject<{
|
|
@@ -137,25 +146,46 @@ declare const TicketQualityProfileSchema: z.ZodObject<{
|
|
|
137
146
|
coherence?: number | undefined;
|
|
138
147
|
progress?: number | undefined;
|
|
139
148
|
}>;
|
|
140
|
-
/**
|
|
149
|
+
/**
|
|
150
|
+
* §2.6 #8 — quality composite (sub-scores derived from the other projections).
|
|
151
|
+
*
|
|
152
|
+
* ML.1.5 — `overall` is now gated on an EVIDENCE BASIS: it counts ONLY `testPass` (real
|
|
153
|
+
* `testPassRate.total>0`) and NON-VACUOUS `coherence`; `discovery` is dropped from
|
|
154
|
+
* `overall` (a filed discovery is desirable, not a defect — the raw count survives as the
|
|
155
|
+
* `discovery` sub-score). With no evidence, `overall` is `undefined` (withheld — never a
|
|
156
|
+
* fabricated 100). `confidence`/`evidenceBasis` describe what backs `overall`. Stored
|
|
157
|
+
* opaque via `a.json()` (`resource.ts` `qualityComposite`) → the new fields need no
|
|
158
|
+
* schema migration.
|
|
159
|
+
*/
|
|
141
160
|
declare const QualityCompositeSchema: z.ZodObject<{
|
|
142
161
|
coherence: z.ZodOptional<z.ZodNumber>;
|
|
143
162
|
testPass: z.ZodOptional<z.ZodNumber>;
|
|
144
163
|
discovery: z.ZodOptional<z.ZodNumber>;
|
|
145
164
|
estimation: z.ZodOptional<z.ZodNumber>;
|
|
146
165
|
overall: z.ZodOptional<z.ZodNumber>;
|
|
166
|
+
/**
|
|
167
|
+
* Which sub-scores carry real evidence for `overall` — a subset of
|
|
168
|
+
* `['tests','coherence']`. Empty ⇒ `overall` withheld.
|
|
169
|
+
*/
|
|
170
|
+
evidenceBasis: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
171
|
+
/** `none` (no evidence) · `partial` (one basis) · `full` (both bases). */
|
|
172
|
+
confidence: z.ZodOptional<z.ZodEnum<["none", "partial", "full"]>>;
|
|
147
173
|
}, "strip", z.ZodTypeAny, {
|
|
148
174
|
discovery?: number | undefined;
|
|
149
175
|
coherence?: number | undefined;
|
|
150
176
|
testPass?: number | undefined;
|
|
151
177
|
estimation?: number | undefined;
|
|
152
178
|
overall?: number | undefined;
|
|
179
|
+
evidenceBasis?: string[] | undefined;
|
|
180
|
+
confidence?: "partial" | "none" | "full" | undefined;
|
|
153
181
|
}, {
|
|
154
182
|
discovery?: number | undefined;
|
|
155
183
|
coherence?: number | undefined;
|
|
156
184
|
testPass?: number | undefined;
|
|
157
185
|
estimation?: number | undefined;
|
|
158
186
|
overall?: number | undefined;
|
|
187
|
+
evidenceBasis?: string[] | undefined;
|
|
188
|
+
confidence?: "partial" | "none" | "full" | undefined;
|
|
159
189
|
}>;
|
|
160
190
|
export declare const ImplementationSessionAggregateSchema: z.ZodObject<{
|
|
161
191
|
implementationSessionId: z.ZodString;
|
|
@@ -204,16 +234,25 @@ export declare const ImplementationSessionAggregateSchema: z.ZodObject<{
|
|
|
204
234
|
score: z.ZodNumber;
|
|
205
235
|
workSessionId: z.ZodString;
|
|
206
236
|
triggerActionId: z.ZodString;
|
|
237
|
+
/**
|
|
238
|
+
* ML.1.5 — TRUE when this point's score is a VACUOUS 100 (nothing touched). The
|
|
239
|
+
* quality composite counts coherence toward `overall` ONLY over non-vacuous points, so
|
|
240
|
+
* a nothing-touched 100 no longer fabricates an earned score. Absent on legacy points →
|
|
241
|
+
* read as non-vacuous.
|
|
242
|
+
*/
|
|
243
|
+
vacuous: z.ZodOptional<z.ZodBoolean>;
|
|
207
244
|
}, "strip", z.ZodTypeAny, {
|
|
208
245
|
at: string;
|
|
209
246
|
score: number;
|
|
210
247
|
triggerActionId: string;
|
|
211
248
|
workSessionId: string;
|
|
249
|
+
vacuous?: boolean | undefined;
|
|
212
250
|
}, {
|
|
213
251
|
at: string;
|
|
214
252
|
score: number;
|
|
215
253
|
triggerActionId: string;
|
|
216
254
|
workSessionId: string;
|
|
255
|
+
vacuous?: boolean | undefined;
|
|
217
256
|
}>, "many">>;
|
|
218
257
|
coherenceHistogram: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
219
258
|
testPassRate: z.ZodDefault<z.ZodObject<{
|
|
@@ -282,18 +321,29 @@ export declare const ImplementationSessionAggregateSchema: z.ZodObject<{
|
|
|
282
321
|
discovery: z.ZodOptional<z.ZodNumber>;
|
|
283
322
|
estimation: z.ZodOptional<z.ZodNumber>;
|
|
284
323
|
overall: z.ZodOptional<z.ZodNumber>;
|
|
324
|
+
/**
|
|
325
|
+
* Which sub-scores carry real evidence for `overall` — a subset of
|
|
326
|
+
* `['tests','coherence']`. Empty ⇒ `overall` withheld.
|
|
327
|
+
*/
|
|
328
|
+
evidenceBasis: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
329
|
+
/** `none` (no evidence) · `partial` (one basis) · `full` (both bases). */
|
|
330
|
+
confidence: z.ZodOptional<z.ZodEnum<["none", "partial", "full"]>>;
|
|
285
331
|
}, "strip", z.ZodTypeAny, {
|
|
286
332
|
discovery?: number | undefined;
|
|
287
333
|
coherence?: number | undefined;
|
|
288
334
|
testPass?: number | undefined;
|
|
289
335
|
estimation?: number | undefined;
|
|
290
336
|
overall?: number | undefined;
|
|
337
|
+
evidenceBasis?: string[] | undefined;
|
|
338
|
+
confidence?: "partial" | "none" | "full" | undefined;
|
|
291
339
|
}, {
|
|
292
340
|
discovery?: number | undefined;
|
|
293
341
|
coherence?: number | undefined;
|
|
294
342
|
testPass?: number | undefined;
|
|
295
343
|
estimation?: number | undefined;
|
|
296
344
|
overall?: number | undefined;
|
|
345
|
+
evidenceBasis?: string[] | undefined;
|
|
346
|
+
confidence?: "partial" | "none" | "full" | undefined;
|
|
297
347
|
}>>;
|
|
298
348
|
lastProcessedActionId: z.ZodOptional<z.ZodString>;
|
|
299
349
|
lastProcessedEventId: z.ZodOptional<z.ZodString>;
|
|
@@ -325,6 +375,7 @@ export declare const ImplementationSessionAggregateSchema: z.ZodObject<{
|
|
|
325
375
|
score: number;
|
|
326
376
|
triggerActionId: string;
|
|
327
377
|
workSessionId: string;
|
|
378
|
+
vacuous?: boolean | undefined;
|
|
328
379
|
}[];
|
|
329
380
|
coherenceHistogram: Record<string, number>;
|
|
330
381
|
testPassRate: {
|
|
@@ -356,6 +407,8 @@ export declare const ImplementationSessionAggregateSchema: z.ZodObject<{
|
|
|
356
407
|
testPass?: number | undefined;
|
|
357
408
|
estimation?: number | undefined;
|
|
358
409
|
overall?: number | undefined;
|
|
410
|
+
evidenceBasis?: string[] | undefined;
|
|
411
|
+
confidence?: "partial" | "none" | "full" | undefined;
|
|
359
412
|
};
|
|
360
413
|
lastProcessedActionId?: string | undefined;
|
|
361
414
|
lastProcessedEventId?: string | undefined;
|
|
@@ -387,6 +440,7 @@ export declare const ImplementationSessionAggregateSchema: z.ZodObject<{
|
|
|
387
440
|
score: number;
|
|
388
441
|
triggerActionId: string;
|
|
389
442
|
workSessionId: string;
|
|
443
|
+
vacuous?: boolean | undefined;
|
|
390
444
|
}[] | undefined;
|
|
391
445
|
coherenceHistogram?: Record<string, number> | undefined;
|
|
392
446
|
testPassRate?: {
|
|
@@ -418,6 +472,8 @@ export declare const ImplementationSessionAggregateSchema: z.ZodObject<{
|
|
|
418
472
|
testPass?: number | undefined;
|
|
419
473
|
estimation?: number | undefined;
|
|
420
474
|
overall?: number | undefined;
|
|
475
|
+
evidenceBasis?: string[] | undefined;
|
|
476
|
+
confidence?: "partial" | "none" | "full" | undefined;
|
|
421
477
|
} | undefined;
|
|
422
478
|
lastProcessedEventId?: string | undefined;
|
|
423
479
|
}>;
|
package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementation-session-aggregate.d.ts","sourceRoot":"","sources":["../../src/runtime/implementation-session-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,2EAA2E;AAC3E,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;EAO5B,CAAC;AAEH,4FAA4F;AAC5F,QAAA,MAAM,sBAAsB;;;;;;;;;;;;EAI1B,CAAC;AAEH,kDAAkD;AAClD,QAAA,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"implementation-session-aggregate.d.ts","sourceRoot":"","sources":["../../src/runtime/implementation-session-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,2EAA2E;AAC3E,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;EAO5B,CAAC;AAEH,4FAA4F;AAC5F,QAAA,MAAM,sBAAsB;;;;;;;;;;;;EAI1B,CAAC;AAEH,kDAAkD;AAClD,QAAA,MAAM,oBAAoB;;;;;IAKxB;;;;;OAKG;;;;;;;;;;;;;;EAEH,CAAC;AAEH,kEAAkE;AAClE,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;EAKtB,CAAC;AAEH;2FAC2F;AAC3F,QAAA,MAAM,oBAAoB;;;;;;;;;;;;EAIxB,CAAC;AAEH,gDAAgD;AAChD,QAAA,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS9B,CAAC;AAEH;;;;;;;;;;GAUG;AACH,QAAA,MAAM,sBAAsB;;;;;;IAM1B;;;OAGG;;IAEH,0EAA0E;;;;;;;;;;;;;;;;;;EAE1E,CAAC;AAEH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA/D/C;;;;;WAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiDH;;;WAGG;;QAEH,0EAA0E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6D1E,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAClG,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACxF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACpF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAChF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC5E,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAChF,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC5F,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js
CHANGED
|
@@ -44,6 +44,13 @@ const CoherencePointSchema = z.object({
|
|
|
44
44
|
score: z.number(),
|
|
45
45
|
workSessionId: z.string(),
|
|
46
46
|
triggerActionId: z.string(),
|
|
47
|
+
/**
|
|
48
|
+
* ML.1.5 — TRUE when this point's score is a VACUOUS 100 (nothing touched). The
|
|
49
|
+
* quality composite counts coherence toward `overall` ONLY over non-vacuous points, so
|
|
50
|
+
* a nothing-touched 100 no longer fabricates an earned score. Absent on legacy points →
|
|
51
|
+
* read as non-vacuous.
|
|
52
|
+
*/
|
|
53
|
+
vacuous: z.boolean().optional(),
|
|
47
54
|
});
|
|
48
55
|
/** §2.6 #4 — test pass-rate tally (per ImplementationSession). */
|
|
49
56
|
const TestPassRateSchema = z.object({
|
|
@@ -70,13 +77,30 @@ const TicketQualityProfileSchema = z.object({
|
|
|
70
77
|
coherence: z.number().optional(),
|
|
71
78
|
progress: z.number().optional(),
|
|
72
79
|
});
|
|
73
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* §2.6 #8 — quality composite (sub-scores derived from the other projections).
|
|
82
|
+
*
|
|
83
|
+
* ML.1.5 — `overall` is now gated on an EVIDENCE BASIS: it counts ONLY `testPass` (real
|
|
84
|
+
* `testPassRate.total>0`) and NON-VACUOUS `coherence`; `discovery` is dropped from
|
|
85
|
+
* `overall` (a filed discovery is desirable, not a defect — the raw count survives as the
|
|
86
|
+
* `discovery` sub-score). With no evidence, `overall` is `undefined` (withheld — never a
|
|
87
|
+
* fabricated 100). `confidence`/`evidenceBasis` describe what backs `overall`. Stored
|
|
88
|
+
* opaque via `a.json()` (`resource.ts` `qualityComposite`) → the new fields need no
|
|
89
|
+
* schema migration.
|
|
90
|
+
*/
|
|
74
91
|
const QualityCompositeSchema = z.object({
|
|
75
92
|
coherence: z.number().optional(),
|
|
76
93
|
testPass: z.number().optional(),
|
|
77
94
|
discovery: z.number().optional(),
|
|
78
95
|
estimation: z.number().optional(),
|
|
79
96
|
overall: z.number().optional(),
|
|
97
|
+
/**
|
|
98
|
+
* Which sub-scores carry real evidence for `overall` — a subset of
|
|
99
|
+
* `['tests','coherence']`. Empty ⇒ `overall` withheld.
|
|
100
|
+
*/
|
|
101
|
+
evidenceBasis: z.array(z.string()).optional(),
|
|
102
|
+
/** `none` (no evidence) · `partial` (one basis) · `full` (both bases). */
|
|
103
|
+
confidence: z.enum(['none', 'partial', 'full']).optional(),
|
|
80
104
|
});
|
|
81
105
|
export const ImplementationSessionAggregateSchema = z.object({
|
|
82
106
|
implementationSessionId: z.string(), // custom PK
|
package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementation-session-aggregate.js","sourceRoot":"","sources":["../../src/runtime/implementation-session-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,2EAA2E;AAC3E,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACnD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC9C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC9C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACnD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;CAC7C,CAAC,CAAC;AAEH,4FAA4F;AAC5F,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC3C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;CAC5B,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"implementation-session-aggregate.js","sourceRoot":"","sources":["../../src/runtime/implementation-session-aggregate.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,7 @@ export declare const WorkSessionActionSchema: z.ZodObject<{
|
|
|
40
40
|
payload: z.ZodOptional<z.ZodUnknown>;
|
|
41
41
|
progressAfter: z.ZodOptional<z.ZodNumber>;
|
|
42
42
|
coherenceAfter: z.ZodOptional<z.ZodNumber>;
|
|
43
|
+
coherenceVacuousAfter: z.ZodOptional<z.ZodBoolean>;
|
|
43
44
|
gatePassedAfter: z.ZodOptional<z.ZodBoolean>;
|
|
44
45
|
retryCount: z.ZodOptional<z.ZodNumber>;
|
|
45
46
|
failedGates: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
@@ -62,6 +63,7 @@ export declare const WorkSessionActionSchema: z.ZodObject<{
|
|
|
62
63
|
assayAction?: string | undefined;
|
|
63
64
|
progressAfter?: number | undefined;
|
|
64
65
|
coherenceAfter?: number | undefined;
|
|
66
|
+
coherenceVacuousAfter?: boolean | undefined;
|
|
65
67
|
gatePassedAfter?: boolean | undefined;
|
|
66
68
|
retryCount?: number | undefined;
|
|
67
69
|
failedGates?: string[] | undefined;
|
|
@@ -83,6 +85,7 @@ export declare const WorkSessionActionSchema: z.ZodObject<{
|
|
|
83
85
|
assayAction?: string | undefined;
|
|
84
86
|
progressAfter?: number | undefined;
|
|
85
87
|
coherenceAfter?: number | undefined;
|
|
88
|
+
coherenceVacuousAfter?: boolean | undefined;
|
|
86
89
|
gatePassedAfter?: boolean | undefined;
|
|
87
90
|
retryCount?: number | undefined;
|
|
88
91
|
failedGates?: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-session-action.d.ts","sourceRoot":"","sources":["../../src/schema/work-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"work-session-action.d.ts","sourceRoot":"","sources":["../../src/schema/work-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0DlC,CAAC"}
|
|
@@ -59,6 +59,11 @@ export const WorkSessionActionSchema = z.object({
|
|
|
59
59
|
// Assay snapshot AFTER the action (trajectories) — populated when an assay ran.
|
|
60
60
|
progressAfter: z.number().optional(),
|
|
61
61
|
coherenceAfter: z.number().optional(),
|
|
62
|
+
// ML.1.5 — the vacuousness marker for `coherenceAfter`: TRUE when the coherence is a
|
|
63
|
+
// nothing-touched VACUOUS 100 (no file/test dimension present), so the projector can
|
|
64
|
+
// withhold it from the quality composite (a vacuous 100 is byte-identical to an earned
|
|
65
|
+
// one otherwise). Absent on pre-ML.1.5 rows → read as non-vacuous/earned.
|
|
66
|
+
coherenceVacuousAfter: z.boolean().optional(),
|
|
62
67
|
gatePassedAfter: z.boolean().optional(),
|
|
63
68
|
// CWS gate-attempt metadata (gate-attempt heatmap, first-pass yield). The row is
|
|
64
69
|
// rendered «Work Session · Ticket {ref} · Retry N» (N = `retryCount`).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-session-action.js","sourceRoot":"","sources":["../../src/schema/work-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IAEd,4EAA4E;IAC5E,mFAAmF;IACnF,gFAAgF;IAChF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,mFAAmF;IACnF,uFAAuF;IACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB,gFAAgF;IAChF,6EAA6E;IAC7E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;IAEzC,oFAAoF;IACpF,qFAAqF;IACrF,qFAAqF;IACrF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,wFAAwF;IACxF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE/B,oFAAoF;IACpF,+EAA+E;IAC/E,yBAAyB;IACzB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAErC,8EAA8E;IAC9E,8EAA8E;IAC9E,4CAA4C;IAC5C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE/B,gFAAgF;IAChF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAEvC,iFAAiF;IACjF,uEAAuE;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE3C,+DAA+D;IAC/D,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"work-session-action.js","sourceRoot":"","sources":["../../src/schema/work-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IAEd,4EAA4E;IAC5E,mFAAmF;IACnF,gFAAgF;IAChF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,mFAAmF;IACnF,uFAAuF;IACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB,gFAAgF;IAChF,6EAA6E;IAC7E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;IAEzC,oFAAoF;IACpF,qFAAqF;IACrF,qFAAqF;IACrF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,wFAAwF;IACxF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE/B,oFAAoF;IACpF,+EAA+E;IAC/E,yBAAyB;IACzB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAErC,8EAA8E;IAC9E,8EAA8E;IAC9E,4CAA4C;IAC5C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE/B,gFAAgF;IAChF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,qFAAqF;IACrF,qFAAqF;IACrF,uFAAuF;IACvF,0EAA0E;IAC1E,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7C,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAEvC,iFAAiF;IACjF,uEAAuE;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE3C,+DAA+D;IAC/D,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC"}
|
|
@@ -117,6 +117,20 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
117
117
|
* with the real stores in M19.
|
|
118
118
|
*/
|
|
119
119
|
coherenceScore: z.ZodOptional<z.ZodNumber>;
|
|
120
|
+
/**
|
|
121
|
+
* Close-to-start elapsed (ML.1.3). Stamped ONCE at CWS finalize from
|
|
122
|
+
* `completedAt − startedAt` — the total wall-clock the session was open, NOT
|
|
123
|
+
* per-step time tracking (that is MP). `durationMs` is the exact elapsed in
|
|
124
|
+
* milliseconds; `actualMinutes` is that rounded to whole minutes (floored at 1
|
|
125
|
+
* for any positive elapsed) and is copied onto `Ticket.actualMinutes` on
|
|
126
|
+
* completion (the count-propagator folds it via the WorkSession stream, and the
|
|
127
|
+
* CWS success write-plan sets it directly). The live Amplify columns already
|
|
128
|
+
* exist (`resource.ts` `WorkSession.actualMinutes: a.integer()` /
|
|
129
|
+
* `durationMs: a.integer()`); the TS surface had no field — mirrored here so the
|
|
130
|
+
* typed write round-trips. Absent until the session completes.
|
|
131
|
+
*/
|
|
132
|
+
actualMinutes: z.ZodOptional<z.ZodNumber>;
|
|
133
|
+
durationMs: z.ZodOptional<z.ZodNumber>;
|
|
120
134
|
}, "strip", z.ZodTypeAny, {
|
|
121
135
|
status: "active" | "paused" | "completed" | "failed" | "aborted";
|
|
122
136
|
id: string;
|
|
@@ -126,6 +140,7 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
126
140
|
implementationSessionId: string;
|
|
127
141
|
specificationId?: string | undefined;
|
|
128
142
|
completedAt?: string | undefined;
|
|
143
|
+
durationMs?: number | undefined;
|
|
129
144
|
branch?: string | undefined;
|
|
130
145
|
commitSha?: string | undefined;
|
|
131
146
|
worktreePath?: string | undefined;
|
|
@@ -149,6 +164,7 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
149
164
|
deletions: z.ZodOptional<z.ZodNumber>;
|
|
150
165
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
151
166
|
coherenceScore?: number | undefined;
|
|
167
|
+
actualMinutes?: number | undefined;
|
|
152
168
|
}, {
|
|
153
169
|
status: "active" | "paused" | "completed" | "failed" | "aborted";
|
|
154
170
|
id: string;
|
|
@@ -158,6 +174,7 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
158
174
|
implementationSessionId: string;
|
|
159
175
|
specificationId?: string | undefined;
|
|
160
176
|
completedAt?: string | undefined;
|
|
177
|
+
durationMs?: number | undefined;
|
|
161
178
|
branch?: string | undefined;
|
|
162
179
|
commitSha?: string | undefined;
|
|
163
180
|
worktreePath?: string | undefined;
|
|
@@ -181,5 +198,6 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
181
198
|
deletions: z.ZodOptional<z.ZodNumber>;
|
|
182
199
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
183
200
|
coherenceScore?: number | undefined;
|
|
201
|
+
actualMinutes?: number | undefined;
|
|
184
202
|
}>;
|
|
185
203
|
//# sourceMappingURL=work-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-session.d.ts","sourceRoot":"","sources":["../../src/schema/work-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;IAK5B;;;;;;;OAOG;;IAGH;;;;;OAKG;;;;;IAOH;;;;;;;OAOG;;;IAIH;;;;;;;;;OASG;;IAGH;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIH;;;;;;;;OAQG
|
|
1
|
+
{"version":3,"file":"work-session.d.ts","sourceRoot":"","sources":["../../src/schema/work-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;IAK5B;;;;;;;OAOG;;IAGH;;;;;OAKG;;;;;IAOH;;;;;;;OAOG;;;IAIH;;;;;;;;;OASG;;IAGH;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIH;;;;;;;;OAQG;;IAGH;;;;;;;;;;;OAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGH,CAAC"}
|
|
@@ -68,5 +68,19 @@ export const WorkSessionSchema = z.object({
|
|
|
68
68
|
* with the real stores in M19.
|
|
69
69
|
*/
|
|
70
70
|
coherenceScore: z.number().optional(),
|
|
71
|
+
/**
|
|
72
|
+
* Close-to-start elapsed (ML.1.3). Stamped ONCE at CWS finalize from
|
|
73
|
+
* `completedAt − startedAt` — the total wall-clock the session was open, NOT
|
|
74
|
+
* per-step time tracking (that is MP). `durationMs` is the exact elapsed in
|
|
75
|
+
* milliseconds; `actualMinutes` is that rounded to whole minutes (floored at 1
|
|
76
|
+
* for any positive elapsed) and is copied onto `Ticket.actualMinutes` on
|
|
77
|
+
* completion (the count-propagator folds it via the WorkSession stream, and the
|
|
78
|
+
* CWS success write-plan sets it directly). The live Amplify columns already
|
|
79
|
+
* exist (`resource.ts` `WorkSession.actualMinutes: a.integer()` /
|
|
80
|
+
* `durationMs: a.integer()`); the TS surface had no field — mirrored here so the
|
|
81
|
+
* typed write round-trips. Absent until the session completes.
|
|
82
|
+
*/
|
|
83
|
+
actualMinutes: z.number().int().nonnegative().optional(),
|
|
84
|
+
durationMs: z.number().int().nonnegative().optional(),
|
|
71
85
|
});
|
|
72
86
|
//# sourceMappingURL=work-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-session.js","sourceRoot":"","sources":["../../src/schema/work-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB;;;;;;;OAOG;IACH,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEtC;;;;;OAKG;IACH,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE;IAEnC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAE7C;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B;;;;;;;;;OASG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC;;;;;;OAMG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAE/C;;;;;;;;OAQG;IACH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"work-session.js","sourceRoot":"","sources":["../../src/schema/work-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB;;;;;;;OAOG;IACH,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEtC;;;;;OAKG;IACH,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE;IAEnC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAE7C;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B;;;;;;;;;OASG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC;;;;;;OAMG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAE/C;;;;;;;;OAQG;IACH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAErC;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC"}
|
|
@@ -5,7 +5,13 @@ import { z } from 'zod';
|
|
|
5
5
|
* canonical home lives here so the ME.14.2 APS enum write-guard (lifecycle) and the
|
|
6
6
|
* validator enum-parity guard share one source and can never drift from the AppSync
|
|
7
7
|
* model. Poisoning this field breaks the gate's own ListEpics read.
|
|
8
|
+
*
|
|
9
|
+
* ML.1.9 (B10) — the `review` lifecycle was torn down at M27, so `review` is retired
|
|
10
|
+
* from this canonical set. Dropping it here flows automatically to the validator
|
|
11
|
+
* enum-parity guard, the lifecycle APS enum write-guard, and the `ticket_general_actions`
|
|
12
|
+
* typed planningType field (an out-of-enum `review` is now denied). Kept in lockstep with
|
|
13
|
+
* the Amplify model (`resource.ts` Epic/Ticket `planningType`) so parity never drifts.
|
|
8
14
|
*/
|
|
9
|
-
export declare const PlanningTypeEnum: z.ZodEnum<["planning", "on_flight"
|
|
15
|
+
export declare const PlanningTypeEnum: z.ZodEnum<["planning", "on_flight"]>;
|
|
10
16
|
export type PlanningType = z.infer<typeof PlanningTypeEnum>;
|
|
11
17
|
//# sourceMappingURL=planning-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-type.d.ts","sourceRoot":"","sources":["../../../src/schema/planning/planning-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB
|
|
1
|
+
{"version":3,"file":"planning-type.d.ts","sourceRoot":"","sources":["../../../src/schema/planning/planning-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,sCAAoC,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -5,6 +5,12 @@ import { z } from 'zod';
|
|
|
5
5
|
* canonical home lives here so the ME.14.2 APS enum write-guard (lifecycle) and the
|
|
6
6
|
* validator enum-parity guard share one source and can never drift from the AppSync
|
|
7
7
|
* model. Poisoning this field breaks the gate's own ListEpics read.
|
|
8
|
+
*
|
|
9
|
+
* ML.1.9 (B10) — the `review` lifecycle was torn down at M27, so `review` is retired
|
|
10
|
+
* from this canonical set. Dropping it here flows automatically to the validator
|
|
11
|
+
* enum-parity guard, the lifecycle APS enum write-guard, and the `ticket_general_actions`
|
|
12
|
+
* typed planningType field (an out-of-enum `review` is now denied). Kept in lockstep with
|
|
13
|
+
* the Amplify model (`resource.ts` Epic/Ticket `planningType`) so parity never drifts.
|
|
8
14
|
*/
|
|
9
|
-
export const PlanningTypeEnum = z.enum(['planning', 'on_flight'
|
|
15
|
+
export const PlanningTypeEnum = z.enum(['planning', 'on_flight']);
|
|
10
16
|
//# sourceMappingURL=planning-type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-type.js","sourceRoot":"","sources":["../../../src/schema/planning/planning-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB
|
|
1
|
+
{"version":3,"file":"planning-type.js","sourceRoot":"","sources":["../../../src/schema/planning/planning-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC"}
|