@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.
Files changed (32) hide show
  1. package/dist/tools/index.js +1 -1
  2. package/dist/tools/index.js.map +1 -1
  3. package/dist/transport/__tests__/remote.test.d.ts +2 -0
  4. package/dist/transport/__tests__/remote.test.d.ts.map +1 -0
  5. package/dist/transport/remote.d.ts.map +1 -1
  6. package/dist/transport/remote.js +23 -4
  7. package/dist/transport/remote.js.map +1 -1
  8. package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.d.ts.map +1 -1
  9. package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts +1 -1
  10. package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts.map +1 -1
  11. package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts +1 -1
  12. package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts.map +1 -1
  13. package/node_modules/@specforge/api-types/package.json +1 -1
  14. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts +57 -1
  15. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts.map +1 -1
  16. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js +25 -1
  17. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js.map +1 -1
  18. package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts +3 -0
  19. package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts.map +1 -1
  20. package/node_modules/@specforge/session-types/dist/schema/work-session-action.js +5 -0
  21. package/node_modules/@specforge/session-types/dist/schema/work-session-action.js.map +1 -1
  22. package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts +18 -0
  23. package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts.map +1 -1
  24. package/node_modules/@specforge/session-types/dist/schema/work-session.js +14 -0
  25. package/node_modules/@specforge/session-types/dist/schema/work-session.js.map +1 -1
  26. package/node_modules/@specforge/session-types/package.json +1 -1
  27. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts +7 -1
  28. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts.map +1 -1
  29. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js +7 -1
  30. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js.map +1 -1
  31. package/node_modules/@specforge/spec-types/package.json +1 -1
  32. package/package.json +7 -7
@@ -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 useResolver = this.config.apiUrl === CHANNEL.endpoint.primary;
24
- if (!useResolver) {
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
- this.resolvedUrl = await resolveEndpoint({
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 === CHANNEL.endpoint.primary) {
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 const useResolver = this.config.apiUrl === CHANNEL.endpoint.primary;\n if (!useResolver) {\n this.resolvedUrl = this.config.apiUrl;\n return this.resolvedUrl;\n }\n this.resolvedUrl = await resolveEndpoint({\n ...CHANNEL.endpoint,\n cacheKey: MCP_CACHE_KEY,\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 this.config.apiUrl === CHANNEL.endpoint.primary\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":"AAcA,SAAS,eAAe;AACxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP,MAAM,kBAAkB;AACxB,MAAM,gBAAgB;AAEf,MAAM,gBAAsC;AAAA,EACzC;AAAA;AAAA,EAEA,cAA6B;AAAA,EAErC,YAAY,QAA+B;AACzC,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,UAA2B;AACvC,QAAI,KAAK,YAAa,QAAO,KAAK;AAClC,UAAM,cAAc,KAAK,OAAO,WAAW,QAAQ,SAAS;AAC5D,QAAI,CAAC,aAAa;AAChB,WAAK,cAAc,KAAK,OAAO;AAC/B,aAAO,KAAK;AAAA,IACd;AACA,SAAK,cAAc,MAAM,gBAAgB;AAAA,MACvC,GAAG,QAAQ;AAAA,MACX,UAAU;AAAA,IACZ,CAAC;AACD,QAAI,KAAK,OAAO,OAAO;AACrB,cAAQ,IAAI,4CAA4C,KAAK,WAAW,EAAE;AAAA,IAC5E;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QACJ,WACA,MACY;AACZ,UAAM,UAAU,KAAK,OAAO,WAAW;AACvC,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,OAAO;AAE9D,QAAI;AACF,UAAI,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,wCAAwC,SAAS,IAAI;AAAA,UAC/D,MAAM,OAAO,KAAK,IAAI;AAAA,QACxB,CAAC;AAAA,MACH;AAEA,YAAM,MAAM,MAAM,KAAK,QAAQ;AAC/B,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,OAAO,MAAM;AAAA;AAAA;AAAA,UAG3C,sBAAsB,KAAK,OAAO,UAAU;AAAA,QAC9C;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,QACxC,QAAQ,WAAW;AAAA,MACrB,CAAC;AAED,mBAAa,SAAS;AAEtB,UAAI,CAAC,SAAS,IAAI;AAGhB,YACE,yBAAyB,SAAS,MAAM,KACxC,KAAK,OAAO,WAAW,QAAQ,SAAS,SACxC;AACA,gBAAM,WAAW,aAAa;AAC9B,eAAK,cAAc;AAAA,QACrB;AACA,cAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAM,gBAAgB,iBAAiB,SAAS,MAAM;AACtD,cAAM,IAAI;AAAA,UACR,uBAAuB,SAAS,MAAM,IAAI,aAAa;AAAA,EAAK,SAAS;AAAA,QACvE;AAAA,MACF;AAMA,YAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,UAAI,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,0CAA0C,SAAS,EAAE;AAAA,MACnE;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,mBAAa,SAAS;AACtB,UAAI,iBAAiB,SAAS,MAAM,SAAS,cAAc;AACzD,cAAM,IAAI;AAAA,UACR,2BAA2B,OAAO,qBAAqB,SAAS;AAAA,QAClE;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,QAAwB;AAChD,QAAM,WAAmC;AAAA,IACvC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,SAAS,MAAM,KAAK;AAC7B;","names":[]}
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":"AAcA,SAAS,eAAe;AACxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP,MAAM,kBAAkB;AACxB,MAAM,gBAAgB;AAGtB,SAAS,QAAQ,GAAuB;AACtC,MAAI;AACF,WAAO,IAAI,IAAI,CAAC;AAAA,EAClB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,SAAS,cAAc,QAAyB;AAC9C,QAAM,IAAI,QAAQ,MAAM,GAAG;AAC3B,MAAI,CAAC,EAAG,QAAO;AACf,SACE,MAAM,QAAQ,QAAQ,SAAS,OAAO,GAAG,QACzC,MAAM,QAAQ,QAAQ,SAAS,QAAQ,GAAG;AAE9C;AAEO,MAAM,gBAAsC;AAAA,EACzC;AAAA;AAAA,EAEA,cAA6B;AAAA,EAErC,YAAY,QAA+B;AACzC,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,UAA2B;AACvC,QAAI,KAAK,YAAa,QAAO,KAAK;AAQlC,UAAM,SAAS,QAAQ,KAAK,OAAO,MAAM;AACzC,QAAI,CAAC,UAAU,CAAC,cAAc,KAAK,OAAO,MAAM,GAAG;AAEjD,WAAK,cAAc,KAAK,OAAO;AAC/B,aAAO,KAAK;AAAA,IACd;AAKA,UAAM,eAAe,MAAM,gBAAgB;AAAA,MACzC,GAAG,QAAQ;AAAA,MACX,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,WAAW,QAAQ,YAAY;AACrC,QAAI,YAAY,QAAQ;AACtB,eAAS,WAAW,OAAO;AAC3B,WAAK,cAAc,SAAS,SAAS,EAAE,QAAQ,OAAO,EAAE;AAAA,IAC1D,OAAO;AACL,WAAK,cAAc;AAAA,IACrB;AACA,QAAI,KAAK,OAAO,OAAO;AACrB,cAAQ,IAAI,4CAA4C,KAAK,WAAW,EAAE;AAAA,IAC5E;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QACJ,WACA,MACY;AACZ,UAAM,UAAU,KAAK,OAAO,WAAW;AACvC,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,OAAO;AAE9D,QAAI;AACF,UAAI,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,wCAAwC,SAAS,IAAI;AAAA,UAC/D,MAAM,OAAO,KAAK,IAAI;AAAA,QACxB,CAAC;AAAA,MACH;AAEA,YAAM,MAAM,MAAM,KAAK,QAAQ;AAC/B,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,OAAO,MAAM;AAAA;AAAA;AAAA,UAG3C,sBAAsB,KAAK,OAAO,UAAU;AAAA,QAC9C;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,QACxC,QAAQ,WAAW;AAAA,MACrB,CAAC;AAED,mBAAa,SAAS;AAEtB,UAAI,CAAC,SAAS,IAAI;AAGhB,YACE,yBAAyB,SAAS,MAAM,KACxC,cAAc,KAAK,OAAO,MAAM,GAChC;AACA,gBAAM,WAAW,aAAa;AAC9B,eAAK,cAAc;AAAA,QACrB;AACA,cAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAM,gBAAgB,iBAAiB,SAAS,MAAM;AACtD,cAAM,IAAI;AAAA,UACR,uBAAuB,SAAS,MAAM,IAAI,aAAa;AAAA,EAAK,SAAS;AAAA,QACvE;AAAA,MACF;AAMA,YAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,UAAI,KAAK,OAAO,OAAO;AACrB,gBAAQ,IAAI,0CAA0C,SAAS,EAAE;AAAA,MACnE;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,mBAAa,SAAS;AACtB,UAAI,iBAAiB,SAAS,MAAM,SAAS,cAAc;AACzD,cAAM,IAAI;AAAA,UACR,2BAA2B,OAAO,qBAAqB,SAAS;AAAA,QAClE;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,QAAwB;AAChD,QAAM,WAAmC;AAAA,IACvC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,SAAS,MAAM,KAAK;AAC7B;","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;AAGH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,oEAAoE;IACpE,aAAa,EAAE,qBAAqB,CAAC;CACtC"}
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' | 'review';
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;AAEnB,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IAIpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,wEAAwE;IACxE,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,uEAAuE;IACvE,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC;IACzD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,uBAAuB;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC/C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC"}
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' | 'review';
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":"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"}
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.8",
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",
@@ -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
- /** §2.6 #8 — quality composite (sub-scores derived from the other projections). */
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
  }>;
@@ -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;;;;;;;;;;;;;;;EAKxB,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,mFAAmF;AACnF,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyD/C,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"}
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"}
@@ -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
- /** §2.6 #8 — quality composite (sub-scores derived from the other projections). */
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
@@ -1 +1 @@
1
- {"version":3,"file":"implementation-session-aggregate.js","sourceRoot":"","sources":["../../src/runtime/implementation-session-aggregate.ts"],"names":[],"mappings":"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"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqDlC,CAAC"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAC"}
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;CACtC,CAAC,CAAC"}
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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specforge/session-types",
3
- "version": "0.4.7",
3
+ "version": "0.4.11",
4
4
  "description": "Session type definitions for SpecForge work/planning/review sessions.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -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", "review"]>;
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;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,gDAA8C,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
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', 'review']);
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;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC"}
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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specforge/spec-types",
3
- "version": "0.4.7",
3
+ "version": "0.4.11",
4
4
  "description": "Public OpenSpec v1.1 schema — types, Zod schemas, JSON Schema. Future OSS as @openspec/types.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",