@specforge/canary-cli 0.1.18 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/debug/types.d.ts.map +1 -1
- package/dist/cli/commands/debug/types.js +4 -1
- package/dist/cli/commands/debug/types.js.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js +40 -35
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js.map +1 -1
- package/dist/lib/workflow-definitions.js +1 -1
- package/dist/lib/workflow-definitions.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +67 -153
- package/dist/tools/index.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.d.ts +5 -1
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.d.ts +2 -2
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.js +18 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.d.ts +3 -3
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.js +6 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.d.ts +10 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.js +8 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.js +11 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts +11 -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 +9 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session.js.map +1 -1
- package/node_modules/@specforge/session-types/dist/stores/work-session-store.d.ts +9 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-store.d.ts.map +1 -1
- package/node_modules/@specforge/session-types/package.json +1 -1
- package/node_modules/@specforge/types/dist/mcp/tools/action-work-session.d.ts +1 -1
- package/package.json +4 -4
- package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +40 -35
|
@@ -192,8 +192,12 @@ export interface ActionPlanningPayload {
|
|
|
192
192
|
* the human never leaves the review window by editing).
|
|
193
193
|
* - `'agent'` (default) → the session flips to `active` exactly as before (the
|
|
194
194
|
* agent then re-requests the gate via a subsequent CPS).
|
|
195
|
+
*
|
|
196
|
+
* ME.19.5 (D18) — `'system'` is the D18 auto-materialized baseline actor
|
|
197
|
+
* (system-originated, deterministic). Extends the 'agent'|'human' union at this
|
|
198
|
+
* canonical contract site so the value flows uncompiled to `performedByActor`.
|
|
195
199
|
*/
|
|
196
|
-
actor?: 'agent' | 'human';
|
|
200
|
+
actor?: 'agent' | 'human' | 'system';
|
|
197
201
|
}
|
|
198
202
|
export interface CompletePlanningPayload {
|
|
199
203
|
sessionId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-contract.d.ts","sourceRoot":"","sources":["../../src/runtime/lifecycle-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,cAAc,GACtB,wBAAwB,GACxB,yBAAyB,GACzB,2BAA2B,CAAC;AAEhC;;;;;;;;;;GAUG;AACH;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,qBAAqB,CAAC;IACtC;;;;;;;;;OASG;IACH,OAAO,EAAE,SAAS,GAAG,QAAQ,GAAG,mBAAmB,CAAC;IACpD;;;;;;;;OAQG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,SAAS,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,SAAS,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,2FAA2F;IAC3F,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,uFAAuF;IACvF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8FAA8F;IAC9F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+DAA+D;IAC/D,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,8FAA8F;IAC9F,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACvC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,qBAAqB,EAAE,CAAC,GAAG,OAAO;IACrE,QAAQ,EAAE,CAAC,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,qBAAqB,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB
|
|
1
|
+
{"version":3,"file":"lifecycle-contract.d.ts","sourceRoot":"","sources":["../../src/runtime/lifecycle-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare const PLANNING_MUTATING_OPERATIONS: readonly ["update_spec", "create_epic", "update_epic", "delete_epic", "create_ticket", "
|
|
1
|
+
export declare const PLANNING_MUTATING_OPERATIONS: readonly ["update_spec", "create_epic", "update_epic", "delete_epic", "create_ticket", "delete_ticket", "ticket_general_actions", "ticket_step_actions", "ticket_criteria_actions", "ticket_test_actions", "create_blueprint", "update_blueprint", "delete_blueprint", "link_blueprint_to_tickets", "unlink_blueprint_to_tickets", "create_dependencies", "delete_dependencies", "justify", "unjustify", "link_step_file", "unlink_step_file", "link_step_snippet", "unlink_step_snippet", "apply_creator_election"];
|
|
2
2
|
export declare const PLANNING_READ_ONLY_OPERATIONS: readonly ["get_planning_status"];
|
|
3
3
|
export declare const PLANNING_SYNTHETIC_OPERATIONS: readonly ["start_planning_session", "complete_planning_session", "phase_complete", "phase_advance", "phase_rollback", "human_approve", "human_reject_with_feedback", "human_reject_no_feedback", "session_closed"];
|
|
4
|
-
export declare const PLANNING_OPERATIONS: readonly ["update_spec", "create_epic", "update_epic", "delete_epic", "create_ticket", "
|
|
4
|
+
export declare const PLANNING_OPERATIONS: readonly ["update_spec", "create_epic", "update_epic", "delete_epic", "create_ticket", "delete_ticket", "ticket_general_actions", "ticket_step_actions", "ticket_criteria_actions", "ticket_test_actions", "create_blueprint", "update_blueprint", "delete_blueprint", "link_blueprint_to_tickets", "unlink_blueprint_to_tickets", "create_dependencies", "delete_dependencies", "justify", "unjustify", "link_step_file", "unlink_step_file", "link_step_snippet", "unlink_step_snippet", "apply_creator_election", "get_planning_status", "start_planning_session", "complete_planning_session", "phase_complete", "phase_advance", "phase_rollback", "human_approve", "human_reject_with_feedback", "human_reject_no_feedback", "session_closed"];
|
|
5
5
|
export type PlanningOperationName = typeof PLANNING_OPERATIONS[number];
|
|
6
6
|
//# sourceMappingURL=planning-operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-operations.d.ts","sourceRoot":"","sources":["../../src/runtime/planning-operations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"planning-operations.d.ts","sourceRoot":"","sources":["../../src/runtime/planning-operations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,sfA8C/B,CAAC;AAEX,eAAO,MAAM,6BAA6B,kCAAmC,CAAC;AAE9E,eAAO,MAAM,6BAA6B,oNAUhC,CAAC;AAEX,eAAO,MAAM,mBAAmB,stBAItB,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
export const PLANNING_MUTATING_OPERATIONS = [
|
|
2
2
|
'update_spec',
|
|
3
3
|
'create_epic', 'update_epic', 'delete_epic',
|
|
4
|
-
'create_ticket', '
|
|
4
|
+
'create_ticket', 'delete_ticket',
|
|
5
|
+
// ME.19.1 (D8) — the four ticket NODE VERBS replace the retired free-form
|
|
6
|
+
// `update_ticket` (`{id, fields: z.record(z.unknown())}`). Each targets ONE scope so
|
|
7
|
+
// its payload can be TYPED (no `fields` bag) and its phase semantics can differ:
|
|
8
|
+
// · ticket_general_actions — shell/general fields (title, description, complexity,
|
|
9
|
+
// epicId, order, planningType, ticketType, guardrails, estimatedMinutes).
|
|
10
|
+
// ticket_decomposition-native + usable in ticket_expansion WITHOUT rollback for
|
|
11
|
+
// shell edits; rolls back to ticket_decomposition ONLY when it changes
|
|
12
|
+
// planningType/ticketType (a decomposition-level classification). SHELL-EDIT only —
|
|
13
|
+
// create/delete stay with create_ticket/delete_ticket (D20).
|
|
14
|
+
// · ticket_step_actions / ticket_criteria_actions / ticket_test_actions — the
|
|
15
|
+
// ticket_expansion-content verbs: ticket_expansion-native, NO cross_validation in
|
|
16
|
+
// the band, so a late call from cross_validation rolls back to ticket_expansion
|
|
17
|
+
// (re-score + re-gate the MB.15 link gate) — update_ticket's exact phase semantics
|
|
18
|
+
// (D15). complexity/planningType/ticketType are TYPED enum fields on the general
|
|
19
|
+
// verb (enum-poison impossible by construction, D20); `status` is system/event-driven
|
|
20
|
+
// (readiness cascade / work-discovery) and is NOT on any node-verb payload.
|
|
21
|
+
'ticket_general_actions', 'ticket_step_actions', 'ticket_criteria_actions', 'ticket_test_actions',
|
|
5
22
|
'create_blueprint', 'update_blueprint', 'delete_blueprint',
|
|
6
23
|
'link_blueprint_to_tickets', 'unlink_blueprint_to_tickets',
|
|
7
24
|
'create_dependencies', 'delete_dependencies',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-operations.js","sourceRoot":"","sources":["../../src/runtime/planning-operations.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,aAAa;IACb,aAAa,EAAE,aAAa,EAAE,aAAa;IAC3C,eAAe,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"planning-operations.js","sourceRoot":"","sources":["../../src/runtime/planning-operations.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,aAAa;IACb,aAAa,EAAE,aAAa,EAAE,aAAa;IAC3C,eAAe,EAAE,eAAe;IAChC,0EAA0E;IAC1E,qFAAqF;IACrF,iFAAiF;IACjF,qFAAqF;IACrF,8EAA8E;IAC9E,oFAAoF;IACpF,2EAA2E;IAC3E,wFAAwF;IACxF,iEAAiE;IACjE,gFAAgF;IAChF,sFAAsF;IACtF,oFAAoF;IACpF,uFAAuF;IACvF,qFAAqF;IACrF,0FAA0F;IAC1F,gFAAgF;IAChF,wBAAwB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,qBAAqB;IACjG,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB;IAC1D,2BAA2B,EAAE,6BAA6B;IAC1D,qBAAqB,EAAE,qBAAqB;IAC5C,0EAA0E;IAC1E,iFAAiF;IACjF,qFAAqF;IACrF,kFAAkF;IAClF,kFAAkF;IAClF,SAAS,EAAE,WAAW;IACtB,+EAA+E;IAC/E,+EAA+E;IAC/E,kFAAkF;IAClF,2EAA2E;IAC3E,0BAA0B;IAC1B,gBAAgB,EAAE,kBAAkB;IACpC,mBAAmB,EAAE,qBAAqB;IAC1C,sEAAsE;IACtE,6EAA6E;IAC7E,+EAA+E;IAC/E,kFAAkF;IAClF,sFAAsF;IACtF,uFAAuF;IACvF,sFAAsF;IACtF,0DAA0D;IAC1D,wBAAwB;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,qBAAqB,CAAU,CAAC;AAE9E,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,wBAAwB;IACxB,2BAA2B;IAC3B,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,4BAA4B;IAC5B,0BAA0B;IAC1B,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,GAAG,4BAA4B;IAC/B,GAAG,6BAA6B;IAChC,GAAG,6BAA6B;CACxB,CAAC"}
|
|
@@ -18,7 +18,7 @@ export declare const PlanningSessionActionSchema: z.ZodObject<{
|
|
|
18
18
|
perEntityScoresAfter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
19
19
|
humanInstruction: z.ZodOptional<z.ZodString>;
|
|
20
20
|
targetActionId: z.ZodOptional<z.ZodString>;
|
|
21
|
-
performedByActor: z.ZodEnum<["agent", "human"]>;
|
|
21
|
+
performedByActor: z.ZodEnum<["agent", "human", "system"]>;
|
|
22
22
|
performedByUserId: z.ZodOptional<z.ZodString>;
|
|
23
23
|
guidanceVariant: z.ZodOptional<z.ZodEnum<["denied", "gate_failed", "gate_passed", "human_handover", "human_feedback", "phase_advance", "phase_rollback", "phase_complete", "phase_status_report", "awaiting_human_review_handover", "human_feedback_received", "human_rejected_no_feedback", "phase_advanced_after_approve", "session_closed"]>>;
|
|
24
24
|
findingsCategories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
@@ -29,7 +29,7 @@ export declare const PlanningSessionActionSchema: z.ZodObject<{
|
|
|
29
29
|
performedAt: string;
|
|
30
30
|
phase: "planning_spec" | "epic_decomposition" | "epic_expansion" | "ticket_decomposition" | "ticket_expansion" | "cross_validation" | "planned";
|
|
31
31
|
outcome: "success" | "denied";
|
|
32
|
-
performedByActor: "agent" | "human";
|
|
32
|
+
performedByActor: "agent" | "human" | "system";
|
|
33
33
|
entityId?: string | undefined;
|
|
34
34
|
entityType?: "ticket" | "epic" | "spec" | "blueprint" | "acceptanceCriterion" | "implementationStep" | "ticketDependency" | undefined;
|
|
35
35
|
projectId?: string | undefined;
|
|
@@ -52,7 +52,7 @@ export declare const PlanningSessionActionSchema: z.ZodObject<{
|
|
|
52
52
|
performedAt: string;
|
|
53
53
|
phase: "planning_spec" | "epic_decomposition" | "epic_expansion" | "ticket_decomposition" | "ticket_expansion" | "cross_validation" | "planned";
|
|
54
54
|
outcome: "success" | "denied";
|
|
55
|
-
performedByActor: "agent" | "human";
|
|
55
|
+
performedByActor: "agent" | "human" | "system";
|
|
56
56
|
entityId?: string | undefined;
|
|
57
57
|
entityType?: "ticket" | "epic" | "spec" | "blueprint" | "acceptanceCriterion" | "implementationStep" | "ticketDependency" | undefined;
|
|
58
58
|
projectId?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-session-action.d.ts","sourceRoot":"","sources":["../../src/runtime/planning-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"planning-session-action.d.ts","sourceRoot":"","sources":["../../src/runtime/planning-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -41,7 +41,12 @@ export const PlanningSessionActionSchema = z.object({
|
|
|
41
41
|
perEntityScoresAfter: z.record(z.string(), z.number()).optional(),
|
|
42
42
|
humanInstruction: z.string().optional(),
|
|
43
43
|
targetActionId: z.string().optional(),
|
|
44
|
-
|
|
44
|
+
// ME.19.5 (D18) — `'system'` is the actor of the auto-materialized baseline write on
|
|
45
|
+
// cross_validation entry (system-originated, deterministic). The resolvers stream parser
|
|
46
|
+
// runs this schema's `.safeParse` on EVERY row BEFORE the projector switch, so the enum
|
|
47
|
+
// MUST accept `'system'` or the baseline's scaffold edges are silently bucketed as
|
|
48
|
+
// `schema_mismatch` and dropped.
|
|
49
|
+
performedByActor: z.enum(['agent', 'human', 'system']),
|
|
45
50
|
performedByUserId: z.string().optional(),
|
|
46
51
|
// ── M10.0a write-side capture fields (populated by M10.0b) ──────────────────
|
|
47
52
|
// The guidance variant this action produced + the distinct FINDING_CATEGORIES
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-session-action.js","sourceRoot":"","sources":["../../src/runtime/planning-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,+EAA+E;IAC/E,8EAA8E;IAC9E,iFAAiF;IACjF,2EAA2E;IAC3E,0EAA0E;IAC1E,sEAAsE;IACtE,kFAAkF;IAClF,gFAAgF;IAChF,mFAAmF;IACnF,sEAAsE;IACtE,2EAA2E;IAC3E,6CAA6C;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW;QACrC,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB;KAChE,CAAC,CAAC,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,iFAAiF;IACjF,8DAA8D;IAC9D,kFAAkF;IAClF,qFAAqF;IACrF,oFAAoF;IACpF,oFAAoF;IACpF,mFAAmF;IACnF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"planning-session-action.js","sourceRoot":"","sources":["../../src/runtime/planning-session-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,+EAA+E;IAC/E,8EAA8E;IAC9E,iFAAiF;IACjF,2EAA2E;IAC3E,0EAA0E;IAC1E,sEAAsE;IACtE,kFAAkF;IAClF,gFAAgF;IAChF,mFAAmF;IACnF,sEAAsE;IACtE,2EAA2E;IAC3E,6CAA6C;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW;QACrC,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB;KAChE,CAAC,CAAC,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,iFAAiF;IACjF,8DAA8D;IAC9D,kFAAkF;IAClF,qFAAqF;IACrF,oFAAoF;IACpF,oFAAoF;IACpF,mFAAmF;IACnF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,qFAAqF;IACrF,yFAAyF;IACzF,wFAAwF;IACxF,mFAAmF;IACnF,iCAAiC;IACjC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,+EAA+E;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,8EAA8E;IAC9E,6EAA6E;IAC7E,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IACrD,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC"}
|
|
@@ -52,16 +52,22 @@ export declare const PlanningSessionAggregateSchema: z.ZodObject<{
|
|
|
52
52
|
ticket: z.ZodNumber;
|
|
53
53
|
blueprint: z.ZodNumber;
|
|
54
54
|
dependency: z.ZodNumber;
|
|
55
|
+
dependencyDerived: z.ZodDefault<z.ZodNumber>;
|
|
56
|
+
dependencyAuthored: z.ZodDefault<z.ZodNumber>;
|
|
55
57
|
}, "strip", z.ZodTypeAny, {
|
|
56
58
|
ticket: number;
|
|
57
59
|
epic: number;
|
|
58
60
|
blueprint: number;
|
|
59
61
|
dependency: number;
|
|
62
|
+
dependencyDerived: number;
|
|
63
|
+
dependencyAuthored: number;
|
|
60
64
|
}, {
|
|
61
65
|
ticket: number;
|
|
62
66
|
epic: number;
|
|
63
67
|
blueprint: number;
|
|
64
68
|
dependency: number;
|
|
69
|
+
dependencyDerived?: number | undefined;
|
|
70
|
+
dependencyAuthored?: number | undefined;
|
|
65
71
|
}>;
|
|
66
72
|
entityRevisions: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
67
73
|
type: z.ZodEnum<["epic", "ticket", "blueprint"]>;
|
|
@@ -147,6 +153,8 @@ export declare const PlanningSessionAggregateSchema: z.ZodObject<{
|
|
|
147
153
|
epic: number;
|
|
148
154
|
blueprint: number;
|
|
149
155
|
dependency: number;
|
|
156
|
+
dependencyDerived: number;
|
|
157
|
+
dependencyAuthored: number;
|
|
150
158
|
};
|
|
151
159
|
entityRevisions: Record<string, {
|
|
152
160
|
count: number;
|
|
@@ -202,6 +210,8 @@ export declare const PlanningSessionAggregateSchema: z.ZodObject<{
|
|
|
202
210
|
epic: number;
|
|
203
211
|
blueprint: number;
|
|
204
212
|
dependency: number;
|
|
213
|
+
dependencyDerived?: number | undefined;
|
|
214
|
+
dependencyAuthored?: number | undefined;
|
|
205
215
|
};
|
|
206
216
|
entityRevisions: Record<string, {
|
|
207
217
|
count: number;
|
package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-session-aggregate.d.ts","sourceRoot":"","sources":["../../src/runtime/planning-session-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,8BAA8B
|
|
1
|
+
{"version":3,"file":"planning-session-aggregate.d.ts","sourceRoot":"","sources":["../../src/runtime/planning-session-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkGzC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
|
|
@@ -31,6 +31,14 @@ export const PlanningSessionAggregateSchema = z.object({
|
|
|
31
31
|
ticket: z.number().int().nonnegative(),
|
|
32
32
|
blueprint: z.number().int().nonnegative(),
|
|
33
33
|
dependency: z.number().int().nonnegative(),
|
|
34
|
+
// ME.19.5 (D1/D2/D4 · material M4) — the dependency total SPLIT by ORIGIN so the
|
|
35
|
+
// observatory can show how many edges are SYSTEM-DERIVED (provenance/scaffold, the D18
|
|
36
|
+
// baseline + creator-election) vs AGENT-AUTHORED (semantic, `create_dependencies`). At
|
|
37
|
+
// HEAD there was only the single `dependency` gauge; a projector that lumped both into
|
|
38
|
+
// one bucket hid the parallelization story. Defaulted so legacy aggregate rows (no
|
|
39
|
+
// split) still parse; `dependency` stays the TOTAL for back-compat.
|
|
40
|
+
dependencyDerived: z.number().int().nonnegative().default(0),
|
|
41
|
+
dependencyAuthored: z.number().int().nonnegative().default(0),
|
|
34
42
|
}),
|
|
35
43
|
entityRevisions: z.record(z.string(), z.object({
|
|
36
44
|
type: z.enum(['epic', 'ticket', 'blueprint']),
|
package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-session-aggregate.js","sourceRoot":"","sources":["../../src/runtime/planning-session-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;QACrD,8EAA8E;QAC9E,iFAAiF;QACjF,iFAAiF;QACjF,gFAAgF;QAChF,kFAAkF;QAClF,mFAAmF;QACnF,oFAAoF;QACpF,4BAA4B;QAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC,CAAC;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;YACvC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,CAAC,CAAC;KACJ,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"planning-session-aggregate.js","sourceRoot":"","sources":["../../src/runtime/planning-session-aggregate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-session-test-result.d.ts","sourceRoot":"","sources":["../../src/schema/work-session-test-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"work-session-test-result.d.ts","sourceRoot":"","sources":["../../src/schema/work-session-test-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CtC,CAAC"}
|
|
@@ -15,6 +15,17 @@ export const WorkSessionTestResultSchema = z.object({
|
|
|
15
15
|
failed: z.number().int().nonnegative(),
|
|
16
16
|
skipped: z.number().int().nonnegative().default(0),
|
|
17
17
|
total: z.number().int().nonnegative(),
|
|
18
|
+
// SERVER-DERIVED, not actor-authored (MB.26.2 / D2 + D2a). `record_test_result`
|
|
19
|
+
// does NOT trust the agent-asserted `allPassed`; it recomputes it from the counts at
|
|
20
|
+
// the persistence boundary (`action-work-session.ts` record_test_result) so a
|
|
21
|
+
// fabricated `{0,0,0,0,true}` cannot read as "passing" with nothing passing. The
|
|
22
|
+
// derive is PER-testType: for the count-less gates (typecheck/lint/build) it is
|
|
23
|
+
// `failed===0 && skipped===0` (an honest clean run reports `{0,0,0,0}`); every other
|
|
24
|
+
// type uses the strict `total>0 && failed===0 && skipped===0 && passed===total`. A
|
|
25
|
+
// justified skip is therefore a FIRST-CLASS state — `skipped>0` always stores
|
|
26
|
+
// `allPassed:false` and is cleared by `skippedJustifications` + an approved
|
|
27
|
+
// resolution, never by flipping this flag (D3, MB.26.3). Callers writing this row
|
|
28
|
+
// directly (fixtures/seeds) MUST keep it consistent with the counts.
|
|
18
29
|
allPassed: z.boolean(),
|
|
19
30
|
output: z.string().optional(),
|
|
20
31
|
command: z.string().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-session-test-result.js","sourceRoot":"","sources":["../../src/schema/work-session-test-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,kFAAkF;IAClF,mFAAmF;IACnF,mFAAmF;IACnF,qFAAqF;IACrF,yBAAyB;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAE5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IAEtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACrD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE9B,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"work-session-test-result.js","sourceRoot":"","sources":["../../src/schema/work-session-test-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,kFAAkF;IAClF,mFAAmF;IACnF,mFAAmF;IACnF,qFAAqF;IACrF,yBAAyB;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IAErB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAE5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,gFAAgF;IAChF,qFAAqF;IACrF,8EAA8E;IAC9E,iFAAiF;IACjF,gFAAgF;IAChF,qFAAqF;IACrF,mFAAmF;IACnF,8EAA8E;IAC9E,4EAA4E;IAC5E,kFAAkF;IAClF,qEAAqE;IACrE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IAEtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACrD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE9B,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC"}
|
|
@@ -7,6 +7,15 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
7
7
|
id: z.ZodString;
|
|
8
8
|
ticketId: z.ZodString;
|
|
9
9
|
projectId: z.ZodString;
|
|
10
|
+
/**
|
|
11
|
+
* Denormalized spec scope (the live Amplify column `WorkSession.specificationId`
|
|
12
|
+
* is required — `resource.ts`). OPTIONAL on the runtime type because most reads
|
|
13
|
+
* derive spec from the ticket; it is surfaced on the reads that key off the spec
|
|
14
|
+
* (the `bySpecificationIdAndStatus` GSI — the M24.5b abort cascade enumerates the
|
|
15
|
+
* spec's non-terminal WorkSessions through it) so the denorm round-trips a
|
|
16
|
+
* full-row `relatedPut` without being wiped.
|
|
17
|
+
*/
|
|
18
|
+
specificationId: z.ZodOptional<z.ZodString>;
|
|
10
19
|
/**
|
|
11
20
|
* FK to the parent ImplementationSession (1 ImplementationSession ⇄ N WorkSessions).
|
|
12
21
|
* REQUIRED at the type level: the TS surface intentionally leads the schema —
|
|
@@ -115,6 +124,7 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
115
124
|
startedAt: string;
|
|
116
125
|
ticketId: string;
|
|
117
126
|
implementationSessionId: string;
|
|
127
|
+
specificationId?: string | undefined;
|
|
118
128
|
completedAt?: string | undefined;
|
|
119
129
|
branch?: string | undefined;
|
|
120
130
|
commitSha?: string | undefined;
|
|
@@ -146,6 +156,7 @@ export declare const WorkSessionSchema: z.ZodObject<{
|
|
|
146
156
|
startedAt: string;
|
|
147
157
|
ticketId: string;
|
|
148
158
|
implementationSessionId: string;
|
|
159
|
+
specificationId?: string | undefined;
|
|
149
160
|
completedAt?: string | undefined;
|
|
150
161
|
branch?: string | undefined;
|
|
151
162
|
commitSha?: string | undefined;
|
|
@@ -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;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAC"}
|
|
@@ -9,6 +9,15 @@ export const WorkSessionSchema = z.object({
|
|
|
9
9
|
id: z.string(),
|
|
10
10
|
ticketId: z.string(),
|
|
11
11
|
projectId: z.string(),
|
|
12
|
+
/**
|
|
13
|
+
* Denormalized spec scope (the live Amplify column `WorkSession.specificationId`
|
|
14
|
+
* is required — `resource.ts`). OPTIONAL on the runtime type because most reads
|
|
15
|
+
* derive spec from the ticket; it is surfaced on the reads that key off the spec
|
|
16
|
+
* (the `bySpecificationIdAndStatus` GSI — the M24.5b abort cascade enumerates the
|
|
17
|
+
* spec's non-terminal WorkSessions through it) so the denorm round-trips a
|
|
18
|
+
* full-row `relatedPut` without being wiped.
|
|
19
|
+
*/
|
|
20
|
+
specificationId: z.string().optional(),
|
|
12
21
|
/**
|
|
13
22
|
* FK to the parent ImplementationSession (1 ImplementationSession ⇄ N WorkSessions).
|
|
14
23
|
* REQUIRED at the type level: the TS surface intentionally leads the schema —
|
|
@@ -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;;;;;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;CACtC,CAAC,CAAC"}
|
|
@@ -8,6 +8,15 @@ export interface IWorkSessionStore {
|
|
|
8
8
|
getWorkSession(id: string): Promise<WorkSession | null>;
|
|
9
9
|
getActiveWorkSessionByTicket(ticketId: string): Promise<WorkSession | null>;
|
|
10
10
|
listWorkSessionsByProject(projectId: string, filters?: WorkSessionFilters, opts?: PaginationOptions): Promise<Paginated<WorkSession>>;
|
|
11
|
+
/**
|
|
12
|
+
* Spec-scoped, multi-status enumeration (M24.5b) — lists every WorkSession of a
|
|
13
|
+
* spec whose `status` is in `statuses`, via the `bySpecificationIdAndStatus` GSI.
|
|
14
|
+
* The existing `listWorkSessionsByProject` is project-scoped + single-status, so it
|
|
15
|
+
* cannot drive the abort cascade (which needs the spec's `active` AND `paused`
|
|
16
|
+
* sessions together). Returns the full set (unpaginated — a spec's non-terminal
|
|
17
|
+
* WorkSession count is small and bounded by its ticket count).
|
|
18
|
+
*/
|
|
19
|
+
listWorkSessionsBySpecAndStatus(specificationId: string, statuses: readonly string[]): Promise<WorkSession[]>;
|
|
11
20
|
createWorkSession(session: WorkSession): Promise<void>;
|
|
12
21
|
updateWorkSession(id: string, updates: Partial<WorkSession>): Promise<void>;
|
|
13
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-session-store.d.ts","sourceRoot":"","sources":["../../src/stores/work-session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACxD,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC5E,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACtI,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E"}
|
|
1
|
+
{"version":3,"file":"work-session-store.d.ts","sourceRoot":"","sources":["../../src/stores/work-session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACxD,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC5E,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACtI;;;;;;;OAOG;IACH,+BAA+B,CAC7B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1B,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E"}
|
|
@@ -50,7 +50,7 @@ export interface WorkSessionTestCase {
|
|
|
50
50
|
}
|
|
51
51
|
/** Test result report (merged by testType) */
|
|
52
52
|
export interface WorkSessionTestResult {
|
|
53
|
-
/** Type of test (e.g., "unit", "integration", "e2e", "lint", "
|
|
53
|
+
/** Type of test (e.g., "unit", "integration", "e2e", "lint", "typecheck") */
|
|
54
54
|
testType: string;
|
|
55
55
|
/** Number of tests that passed */
|
|
56
56
|
passed: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@specforge/canary-cli",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "MCP server for SpecForge - AI agent integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"inquirer": "^9.3.8",
|
|
18
18
|
"minimatch": "^10.1.1",
|
|
19
19
|
"ora": "^8.2.0",
|
|
20
|
-
"@specforge/session-types": "0.
|
|
20
|
+
"@specforge/session-types": "0.4.3",
|
|
21
21
|
"@specforge/types": "1.0.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"tsx": "^4.7.0",
|
|
31
31
|
"typescript": "^5.0.0",
|
|
32
32
|
"vitest": "4.0.18",
|
|
33
|
-
"@specforge/lifecycle": "0.
|
|
33
|
+
"@specforge/lifecycle": "0.3.3"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
36
|
"node": ">=18.0.0"
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@specforge/types",
|
|
57
57
|
"@specforge/session-types"
|
|
58
58
|
],
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "907b03d7d527d1442ee474a9326395fe1e631846",
|
|
60
60
|
"scripts": {
|
|
61
61
|
"build": "tsup && tsc --emitDeclarationOnly --outDir dist",
|
|
62
62
|
"typecheck": "tsc --noEmit",
|
|
@@ -235,20 +235,28 @@ Only after the interrogation loop is complete (or sufficient for Adaptive mode),
|
|
|
235
235
|
ticket_decomposition (SHELL only):
|
|
236
236
|
{ operation: { type: 'create_ticket', epicId, title, description } }
|
|
237
237
|
|
|
238
|
-
ticket_expansion (author each ticket's body):
|
|
239
|
-
|
|
238
|
+
ticket_expansion (author each ticket's body — ONE node verb per scope, each TYPED):
|
|
239
|
+
// shell / general fields (partial edit; changing ticketType/planningType rolls back)
|
|
240
|
+
{ operation: { type: 'ticket_general_actions', ticketId,
|
|
240
241
|
ticketType, // 'implementation' | 'verification'
|
|
241
242
|
complexity, // 'small' | 'medium' | 'large' | 'xlarge'
|
|
242
243
|
estimatedMinutes, // integer — MINUTES, not hours
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
244
|
+
guardrails } }
|
|
245
|
+
// acceptance criteria — batch add/edit/remove/reorder
|
|
246
|
+
{ operation: { type: 'ticket_criteria_actions', ticketId,
|
|
247
|
+
add: [{ given, when, then }, …] } } // BDD objects
|
|
248
|
+
// implementation steps — EACH step carries the file(s) it touches BY ROLE (step-as-atom)
|
|
249
|
+
{ operation: { type: 'ticket_step_actions', ticketId,
|
|
250
|
+
add: [{ text, // the functional work this step does
|
|
251
|
+
files: [{ path, role }] }] } } // role ∈ creates|modifies|deletes|imports|reads
|
|
252
|
+
// test specification (single object)
|
|
253
|
+
{ operation: { type: 'ticket_test_actions', ticketId,
|
|
254
|
+
testSpecification: { testTypes, qualityGates, testCommands, coverageTarget } } }
|
|
255
|
+
(There is NO flat file list any more: a file is declared INLINE on the step that
|
|
256
|
+
touches it via files:[{path, role}] — that derives the step↔file link + the ticket's
|
|
257
|
+
file rows on the same call. Inline code/type patterns go in codeSnippets/typeSnippets,
|
|
258
|
+
attached to a step via the snippet's stepId. blueprint↔ticket links are NOT set here —
|
|
259
|
+
use link_blueprint_to_tickets while decomposing, the sole writer of the blueprint relation.)
|
|
252
260
|
|
|
253
261
|
cross_validation (wire the dependency DAG):
|
|
254
262
|
{ operation: { type: 'create_dependencies',
|
|
@@ -283,18 +291,16 @@ Before completing the session, verify internally (and confirm with \`get_plannin
|
|
|
283
291
|
|
|
284
292
|
### Test Strategy in Tickets
|
|
285
293
|
|
|
286
|
-
Acceptance criteria are BDD objects; test expectations live in \`testSpecification
|
|
294
|
+
Acceptance criteria are BDD objects (set via \`ticket_criteria_actions\`); test expectations live in \`testSpecification\` (set via \`ticket_test_actions\`) — both during \`ticket_expansion\`:
|
|
287
295
|
\`\`\`
|
|
288
|
-
{ operation: { type: '
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
coverageTarget: 80
|
|
297
|
-
}
|
|
296
|
+
{ operation: { type: 'ticket_criteria_actions', ticketId, add: [
|
|
297
|
+
{ given: "a valid email and password", when: "the user creates an account", then: "the account is persisted and a welcome email is sent" },
|
|
298
|
+
{ given: "an email that already exists", when: "the user creates an account", then: "the API returns 409" }
|
|
299
|
+
] } }
|
|
300
|
+
{ operation: { type: 'ticket_test_actions', ticketId, testSpecification: {
|
|
301
|
+
testTypes: ["unit", "integration"],
|
|
302
|
+
testCommands: ["pnpm test -- --filter registration"],
|
|
303
|
+
coverageTarget: 80
|
|
298
304
|
} } }
|
|
299
305
|
\`\`\`
|
|
300
306
|
|
|
@@ -305,19 +311,18 @@ For complex features, create dedicated verification tickets (shell in \`ticket_d
|
|
|
305
311
|
title: "E2E: Complete checkout flow",
|
|
306
312
|
description: "End-to-end test covering the full checkout journey" } }
|
|
307
313
|
|
|
308
|
-
// ticket_expansion
|
|
309
|
-
{ operation: { type: '
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
{
|
|
313
|
-
|
|
314
|
-
{
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
} } }
|
|
314
|
+
// ticket_expansion — classify, then steps (files carried by role), then tests
|
|
315
|
+
{ operation: { type: 'ticket_general_actions', ticketId, ticketType: "verification" } }
|
|
316
|
+
{ operation: { type: 'ticket_step_actions', ticketId, add: [
|
|
317
|
+
{ text: "Create seed data: user with items in cart, valid payment method",
|
|
318
|
+
files: [{ path: "tests/fixtures/checkout-seeds.ts", role: "creates" }] },
|
|
319
|
+
{ text: "Write Playwright test: navigate to cart → checkout → payment → confirmation",
|
|
320
|
+
files: [{ path: "tests/e2e/checkout.spec.ts", role: "creates" }] },
|
|
321
|
+
{ text: "Cover error states: expired card, out-of-stock item, network timeout" },
|
|
322
|
+
{ text: "Add to CI pipeline as blocking check" }
|
|
323
|
+
] } }
|
|
324
|
+
{ operation: { type: 'ticket_test_actions', ticketId,
|
|
325
|
+
testSpecification: { testTypes: ["e2e"], testCommands: ["pnpm test:e2e -- checkout"] } } }
|
|
321
326
|
|
|
322
327
|
// cross_validation
|
|
323
328
|
{ operation: { type: 'create_dependencies',
|