openplanr 1.18.0 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/services/operate/advisors.d.ts +65 -5
  2. package/dist/services/operate/advisors.d.ts.map +1 -1
  3. package/dist/services/operate/advisors.js +101 -6
  4. package/dist/services/operate/advisors.js.map +1 -1
  5. package/dist/services/operate/config.d.ts +10 -0
  6. package/dist/services/operate/config.d.ts.map +1 -1
  7. package/dist/services/operate/config.js +53 -6
  8. package/dist/services/operate/config.js.map +1 -1
  9. package/dist/services/operate/engine.d.ts +22 -6
  10. package/dist/services/operate/engine.d.ts.map +1 -1
  11. package/dist/services/operate/engine.js +20 -9
  12. package/dist/services/operate/engine.js.map +1 -1
  13. package/dist/services/operate/evidence-readiness.d.ts +11 -1
  14. package/dist/services/operate/evidence-readiness.d.ts.map +1 -1
  15. package/dist/services/operate/evidence-readiness.js +12 -2
  16. package/dist/services/operate/evidence-readiness.js.map +1 -1
  17. package/dist/services/operate/evidence.d.ts +30 -1
  18. package/dist/services/operate/evidence.d.ts.map +1 -1
  19. package/dist/services/operate/evidence.js +219 -10
  20. package/dist/services/operate/evidence.js.map +1 -1
  21. package/dist/services/operate/index.d.ts.map +1 -1
  22. package/dist/services/operate/index.js +5 -0
  23. package/dist/services/operate/index.js.map +1 -1
  24. package/dist/services/operate/lifecycle.d.ts.map +1 -1
  25. package/dist/services/operate/lifecycle.js +17 -1
  26. package/dist/services/operate/lifecycle.js.map +1 -1
  27. package/dist/services/operate/maintenance.d.ts +11 -1
  28. package/dist/services/operate/maintenance.d.ts.map +1 -1
  29. package/dist/services/operate/maintenance.js +78 -11
  30. package/dist/services/operate/maintenance.js.map +1 -1
  31. package/dist/services/operate/projection-persistence.d.ts +35 -7
  32. package/dist/services/operate/projection-persistence.d.ts.map +1 -1
  33. package/dist/services/operate/projection-persistence.js +122 -53
  34. package/dist/services/operate/projection-persistence.js.map +1 -1
  35. package/dist/services/operate/projection.d.ts +9 -1
  36. package/dist/services/operate/projection.d.ts.map +1 -1
  37. package/dist/services/operate/projection.js +12 -9
  38. package/dist/services/operate/projection.js.map +1 -1
  39. package/dist/services/operate/reports.d.ts +9 -0
  40. package/dist/services/operate/reports.d.ts.map +1 -1
  41. package/dist/services/operate/reports.js +20 -1
  42. package/dist/services/operate/reports.js.map +1 -1
  43. package/dist/services/operate/routes.d.ts +84 -0
  44. package/dist/services/operate/routes.d.ts.map +1 -1
  45. package/dist/services/operate/routes.js +519 -10
  46. package/dist/services/operate/routes.js.map +1 -1
  47. package/dist/services/operate/types.d.ts +6 -5
  48. package/dist/services/operate/types.d.ts.map +1 -1
  49. package/package.json +2 -2
@@ -1,6 +1,57 @@
1
1
  import { type OperatingArtifactGeneratorAdapter, type StoredOperatingArtifactGeneration } from './artifact-route-generation.js';
2
2
  import { type OperatingConfig, type OperatingEventHead, type OperatingFinding, type OperatingRoutePlan, type OperatingWorkspaceManifest } from './types.js';
3
+ /**
4
+ * A single member of a grouped-finding epic. Only the fields needed to render
5
+ * the epic markdown are carried; the shared v1.3 route-plan schema stays
6
+ * single-`findingId` (the anchor) — this list is an OpenPlanr-local planning
7
+ * detail recorded in the epic document, never a protocol-schema field.
8
+ */
9
+ export interface EpicFindingMember {
10
+ id: string;
11
+ title: string;
12
+ problem: string;
13
+ proposal: string;
14
+ evidenceRefs: string[];
15
+ }
16
+ /**
17
+ * A consolidation-level grouping of 2+ related accepted findings that routes to
18
+ * one `create-epic` action. `anchorId` is the lexicographically-first member id
19
+ * (carried as the route action's single `findingId`); `members` (sorted by id)
20
+ * is embedded verbatim in the generated epic markdown so finding → epic → spec
21
+ * provenance stays traceable without a new protocol sidecar.
22
+ */
23
+ export interface EpicFindingGroup {
24
+ anchorId: string;
25
+ memberIds: string[];
26
+ members: EpicFindingMember[];
27
+ category: string;
28
+ theme: string;
29
+ evidenceRefs: string[];
30
+ }
31
+ interface GroupableFinding {
32
+ id: string;
33
+ status?: unknown;
34
+ category?: unknown;
35
+ title?: unknown;
36
+ problem?: unknown;
37
+ proposal?: unknown;
38
+ fingerprint?: unknown;
39
+ sensitivity?: unknown;
40
+ evidenceRefs?: unknown;
41
+ }
42
+ /**
43
+ * Group related accepted findings into epic candidates. Two accepted findings
44
+ * are related when they share a non-empty normalized `category`, share the same
45
+ * evidence-derived `fingerprint` lineage, or are semantically equivalent per
46
+ * `consolidation.ts` (which subsumes the Chair merge-proposal source, since a
47
+ * merged finding keeps that shared category/fingerprint). Only components of 2+
48
+ * members become epic groups; every group is deterministic (union-find over
49
+ * id-sorted findings), so the FR7 report suggestion and the FR8 engine route
50
+ * elect exactly the same theme.
51
+ */
52
+ export declare function groupRelatedAcceptedFindings(findings: GroupableFinding[]): EpicFindingGroup[];
3
53
  export declare function nextOperatingSpecOrdinal(projectRoot: string): Promise<number>;
54
+ export declare function nextOperatingEpicOrdinal(projectRoot: string): Promise<number>;
4
55
  export declare function createOperatingRoutePlan(input: {
5
56
  projectRoot: string;
6
57
  cycleId: string;
@@ -12,9 +63,41 @@ export declare function createOperatingRoutePlan(input: {
12
63
  providerDigest: `sha256:${string}`;
13
64
  sequence: number;
14
65
  specId?: string;
66
+ epicId?: string;
15
67
  localRoot?: string;
16
68
  now?: string;
17
69
  }): Promise<OperatingRoutePlan>;
70
+ /**
71
+ * Re-evaluate a cycle's accepted findings for epic election and PROPOSE + accept
72
+ * one governed `create-epic` route per themed 2+-member group that does not yet
73
+ * have one. This is the operator-reachable producer of FR8 epic routes: it runs
74
+ * right after a finding transitions to `accepted` through `governOperatingFinding`,
75
+ * so accepting a related group yields a `create-epic` route through the same
76
+ * journal-backed proposal path the engine uses for freshly-proposed findings —
77
+ * reusing T-006's `groupRelatedAcceptedFindings`/`resolveEpicGroupForAnchor`/
78
+ * `actionKind` so FR7's rendered suggestion and FR8's route always name the same
79
+ * theme.
80
+ *
81
+ * Election never writes the epic markdown and never applies the route (accept ≠
82
+ * apply): it only proposes the route and accepts it — mirroring exactly how
83
+ * governance accepts a finding's individual route — leaving the digest-bound,
84
+ * human-gated `routes apply` as the separate acting step. It is idempotent: a
85
+ * group whose anchor already heads a committed `create-epic` route is skipped, so
86
+ * re-electing (accepting further members of the same theme) never duplicates the
87
+ * epic route. Membership growth before apply fails CLOSED rather than silently
88
+ * writing a different epic: `resolveEpicGroupForAnchor` re-derives the member
89
+ * list from the then-current accepted findings, so a route proposed for {A,B}
90
+ * whose group has grown to {A,B,C} no longer matches its digest-bound preview
91
+ * and `applyOperatingRoute` rejects it with `E_OPERATE_ROUTE_DRIFT` — the same
92
+ * guard every other route kind carries. An individually-routed finding is never
93
+ * re-routed individually — only the group-level epic route is added.
94
+ */
95
+ export declare function electAcceptedFindingEpicRoutes(input: {
96
+ projectRoot: string;
97
+ localRoot?: string;
98
+ cycleId: string;
99
+ now?: string;
100
+ }): Promise<OperatingRoutePlan[]>;
18
101
  export declare function readOperatingRoute(projectRoot: string, routeId: string): Promise<OperatingRoutePlan>;
19
102
  export declare function applyOperatingRoute(input: {
20
103
  projectRoot: string;
@@ -46,4 +129,5 @@ export declare function rollbackOperatingRoute(input: {
46
129
  localRoot?: string;
47
130
  }): Promise<OperatingEventHead>;
48
131
  export declare function routeDestinationDigest(projectRoot: string, route: OperatingRoutePlan): Promise<`sha256:${string}`>;
132
+ export {};
49
133
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/services/operate/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,iCAAiC,EAGtC,KAAK,iCAAiC,EACvC,MAAM,gCAAgC,CAAC;AAuBxC,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAGrB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAChC,MAAM,YAAY,CAAC;AAiDpB,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQnF;AA0BD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,0BAA0B,CAAC;IACtC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,cAAc,EAAE,UAAU,MAAM,EAAE,CAAC;IACnC,cAAc,EAAE,UAAU,MAAM,EAAE,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoH9B;AAuBD,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CAI7B;AA6kBD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,eAAe,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,iCAAiC,CAAC;IACtD,aAAa,CAAC,EAAE,CACd,QAAQ,EACJ,yBAAyB,GACzB,oBAAoB,GACpB,iBAAiB,GACjB,aAAa,GACb,oBAAoB,GACpB,kBAAkB,KACnB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,GAAG,OAAO,CAAC;IACV,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,0BAA0B,GAAG,eAAe,GAAG,SAAS,CAAC;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,UAAU,MAAM,EAAE,CAAC;QACjC,QAAQ,EAAE,iCAAiC,CAAC,UAAU,CAAC,CAAC;KACzD,CAAC;IACF,WAAW,EAAE,KAAK,CAAC;CACpB,CAAC,CA+aD;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8D9B;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,UAAU,MAAM,EAAE,CAAC,CAY7B"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/services/operate/routes.ts"],"names":[],"mappings":"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"}