youmd 0.10.2 → 0.12.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 (205) hide show
  1. package/dist/commands/brain.d.ts.map +1 -1
  2. package/dist/commands/brain.js +91 -28
  3. package/dist/commands/brain.js.map +1 -1
  4. package/dist/commands/chat.d.ts.map +1 -1
  5. package/dist/commands/chat.js +6 -1
  6. package/dist/commands/chat.js.map +1 -1
  7. package/dist/commands/conversations.d.ts +5 -0
  8. package/dist/commands/conversations.d.ts.map +1 -0
  9. package/dist/commands/conversations.js +116 -0
  10. package/dist/commands/conversations.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +1 -0
  12. package/dist/commands/doctor.d.ts.map +1 -1
  13. package/dist/commands/doctor.js +16 -1
  14. package/dist/commands/doctor.js.map +1 -1
  15. package/dist/commands/founder.d.ts +13 -0
  16. package/dist/commands/founder.d.ts.map +1 -0
  17. package/dist/commands/founder.js +189 -0
  18. package/dist/commands/founder.js.map +1 -0
  19. package/dist/commands/handoff.d.ts +5 -0
  20. package/dist/commands/handoff.d.ts.map +1 -0
  21. package/dist/commands/handoff.js +432 -0
  22. package/dist/commands/handoff.js.map +1 -0
  23. package/dist/commands/orchestrate.d.ts +15 -0
  24. package/dist/commands/orchestrate.d.ts.map +1 -1
  25. package/dist/commands/orchestrate.js +294 -0
  26. package/dist/commands/orchestrate.js.map +1 -1
  27. package/dist/commands/project.d.ts.map +1 -1
  28. package/dist/commands/project.js +8 -1
  29. package/dist/commands/project.js.map +1 -1
  30. package/dist/commands/reconcile.d.ts +15 -0
  31. package/dist/commands/reconcile.d.ts.map +1 -0
  32. package/dist/commands/reconcile.js +260 -0
  33. package/dist/commands/reconcile.js.map +1 -0
  34. package/dist/commands/session.d.ts +28 -0
  35. package/dist/commands/session.d.ts.map +1 -0
  36. package/dist/commands/session.js +895 -0
  37. package/dist/commands/session.js.map +1 -0
  38. package/dist/commands/stack.d.ts +2 -0
  39. package/dist/commands/stack.d.ts.map +1 -1
  40. package/dist/commands/stack.js +26 -0
  41. package/dist/commands/stack.js.map +1 -1
  42. package/dist/commands/sync.d.ts.map +1 -1
  43. package/dist/commands/sync.js +11 -0
  44. package/dist/commands/sync.js.map +1 -1
  45. package/dist/commands/tasks.d.ts +57 -0
  46. package/dist/commands/tasks.d.ts.map +1 -1
  47. package/dist/commands/tasks.js +236 -31
  48. package/dist/commands/tasks.js.map +1 -1
  49. package/dist/generated/capability-registry.d.ts +311 -71
  50. package/dist/generated/capability-registry.d.ts.map +1 -1
  51. package/dist/generated/capability-registry.js +346 -71
  52. package/dist/generated/capability-registry.js.map +1 -1
  53. package/dist/index.js +113 -2
  54. package/dist/index.js.map +1 -1
  55. package/dist/lib/api.d.ts +362 -1
  56. package/dist/lib/api.d.ts.map +1 -1
  57. package/dist/lib/api.js +171 -0
  58. package/dist/lib/api.js.map +1 -1
  59. package/dist/lib/brain/adapters.d.ts +20 -1
  60. package/dist/lib/brain/adapters.d.ts.map +1 -1
  61. package/dist/lib/brain/adapters.js +113 -2
  62. package/dist/lib/brain/adapters.js.map +1 -1
  63. package/dist/lib/brain/approval-key-trust.d.ts +29 -0
  64. package/dist/lib/brain/approval-key-trust.d.ts.map +1 -0
  65. package/dist/lib/brain/approval-key-trust.js +139 -0
  66. package/dist/lib/brain/approval-key-trust.js.map +1 -0
  67. package/dist/lib/brain/cache.d.ts +2 -2
  68. package/dist/lib/brain/cache.d.ts.map +1 -1
  69. package/dist/lib/brain/cache.js +4 -4
  70. package/dist/lib/brain/cache.js.map +1 -1
  71. package/dist/lib/brain/content.d.ts +56 -0
  72. package/dist/lib/brain/content.d.ts.map +1 -0
  73. package/dist/lib/brain/content.js +362 -0
  74. package/dist/lib/brain/content.js.map +1 -0
  75. package/dist/lib/brain/descriptor-validator.d.ts +11 -0
  76. package/dist/lib/brain/descriptor-validator.d.ts.map +1 -0
  77. package/dist/lib/brain/descriptor-validator.js +185 -0
  78. package/dist/lib/brain/descriptor-validator.js.map +1 -0
  79. package/dist/lib/brain/discovery.d.ts.map +1 -1
  80. package/dist/lib/brain/discovery.js +103 -60
  81. package/dist/lib/brain/discovery.js.map +1 -1
  82. package/dist/lib/brain/index.d.ts +2 -0
  83. package/dist/lib/brain/index.d.ts.map +1 -1
  84. package/dist/lib/brain/index.js +8 -2
  85. package/dist/lib/brain/index.js.map +1 -1
  86. package/dist/lib/brain/proposal.d.ts +53 -5
  87. package/dist/lib/brain/proposal.d.ts.map +1 -1
  88. package/dist/lib/brain/proposal.js +341 -64
  89. package/dist/lib/brain/proposal.js.map +1 -1
  90. package/dist/lib/brain/safe-file.d.ts +25 -1
  91. package/dist/lib/brain/safe-file.d.ts.map +1 -1
  92. package/dist/lib/brain/safe-file.js +250 -30
  93. package/dist/lib/brain/safe-file.js.map +1 -1
  94. package/dist/lib/brain/safe-open.d.ts +2 -0
  95. package/dist/lib/brain/safe-open.d.ts.map +1 -0
  96. package/dist/lib/brain/safe-open.js +77 -0
  97. package/dist/lib/brain/safe-open.js.map +1 -0
  98. package/dist/lib/brain/safety.d.ts.map +1 -1
  99. package/dist/lib/brain/safety.js +5 -0
  100. package/dist/lib/brain/safety.js.map +1 -1
  101. package/dist/lib/brain/staged-apply.d.ts +2 -1
  102. package/dist/lib/brain/staged-apply.d.ts.map +1 -1
  103. package/dist/lib/brain/staged-apply.js +6 -3
  104. package/dist/lib/brain/staged-apply.js.map +1 -1
  105. package/dist/lib/brain/store.d.ts +3 -0
  106. package/dist/lib/brain/store.d.ts.map +1 -1
  107. package/dist/lib/brain/store.js +68 -0
  108. package/dist/lib/brain/store.js.map +1 -1
  109. package/dist/lib/brain/sync.d.ts +87 -0
  110. package/dist/lib/brain/sync.d.ts.map +1 -0
  111. package/dist/lib/brain/sync.js +238 -0
  112. package/dist/lib/brain/sync.js.map +1 -0
  113. package/dist/lib/brain/types.d.ts +23 -0
  114. package/dist/lib/brain/types.d.ts.map +1 -1
  115. package/dist/lib/config.d.ts +7 -0
  116. package/dist/lib/config.d.ts.map +1 -1
  117. package/dist/lib/config.js +3 -0
  118. package/dist/lib/config.js.map +1 -1
  119. package/dist/lib/daemon.js +1 -1
  120. package/dist/lib/daemon.js.map +1 -1
  121. package/dist/lib/goalRegistryFile.d.ts +169 -0
  122. package/dist/lib/goalRegistryFile.d.ts.map +1 -0
  123. package/dist/lib/goalRegistryFile.js +518 -0
  124. package/dist/lib/goalRegistryFile.js.map +1 -0
  125. package/dist/lib/goalsFile.d.ts +101 -0
  126. package/dist/lib/goalsFile.d.ts.map +1 -0
  127. package/dist/lib/goalsFile.js +413 -0
  128. package/dist/lib/goalsFile.js.map +1 -0
  129. package/dist/lib/handoff.d.ts +170 -0
  130. package/dist/lib/handoff.d.ts.map +1 -0
  131. package/dist/lib/handoff.js +316 -0
  132. package/dist/lib/handoff.js.map +1 -0
  133. package/dist/lib/machine-identity.d.ts +2 -0
  134. package/dist/lib/machine-identity.d.ts.map +1 -1
  135. package/dist/lib/machine-identity.js +13 -6
  136. package/dist/lib/machine-identity.js.map +1 -1
  137. package/dist/lib/onboarding.d.ts +4 -1
  138. package/dist/lib/onboarding.d.ts.map +1 -1
  139. package/dist/lib/onboarding.js +11 -3
  140. package/dist/lib/onboarding.js.map +1 -1
  141. package/dist/lib/orchestrator/loop.d.ts +7 -0
  142. package/dist/lib/orchestrator/loop.d.ts.map +1 -1
  143. package/dist/lib/orchestrator/loop.js +53 -0
  144. package/dist/lib/orchestrator/loop.js.map +1 -1
  145. package/dist/lib/orchestrator/run-journal.d.ts +178 -0
  146. package/dist/lib/orchestrator/run-journal.d.ts.map +1 -0
  147. package/dist/lib/orchestrator/run-journal.js +912 -0
  148. package/dist/lib/orchestrator/run-journal.js.map +1 -0
  149. package/dist/lib/orchestrator/supervisor.d.ts +11 -0
  150. package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
  151. package/dist/lib/orchestrator/supervisor.js +304 -116
  152. package/dist/lib/orchestrator/supervisor.js.map +1 -1
  153. package/dist/lib/orchestrator/tools.d.ts +2 -0
  154. package/dist/lib/orchestrator/tools.d.ts.map +1 -1
  155. package/dist/lib/orchestrator/tools.js +214 -1
  156. package/dist/lib/orchestrator/tools.js.map +1 -1
  157. package/dist/lib/redact.d.ts.map +1 -1
  158. package/dist/lib/redact.js +31 -6
  159. package/dist/lib/redact.js.map +1 -1
  160. package/dist/lib/remote-agent-event.d.ts +19 -0
  161. package/dist/lib/remote-agent-event.d.ts.map +1 -0
  162. package/dist/lib/remote-agent-event.js +85 -0
  163. package/dist/lib/remote-agent-event.js.map +1 -0
  164. package/dist/lib/remote-command.d.ts.map +1 -1
  165. package/dist/lib/remote-command.js +19 -0
  166. package/dist/lib/remote-command.js.map +1 -1
  167. package/dist/lib/remote-executor.d.ts +7 -1
  168. package/dist/lib/remote-executor.d.ts.map +1 -1
  169. package/dist/lib/remote-executor.js +391 -0
  170. package/dist/lib/remote-executor.js.map +1 -1
  171. package/dist/lib/sessionCheckpoint.d.ts +104 -0
  172. package/dist/lib/sessionCheckpoint.d.ts.map +1 -0
  173. package/dist/lib/sessionCheckpoint.js +191 -0
  174. package/dist/lib/sessionCheckpoint.js.map +1 -0
  175. package/dist/lib/sessionHandoff.d.ts +47 -0
  176. package/dist/lib/sessionHandoff.d.ts.map +1 -0
  177. package/dist/lib/sessionHandoff.js +305 -0
  178. package/dist/lib/sessionHandoff.js.map +1 -0
  179. package/dist/lib/stream.d.ts +3 -1
  180. package/dist/lib/stream.d.ts.map +1 -1
  181. package/dist/lib/stream.js +8 -3
  182. package/dist/lib/stream.js.map +1 -1
  183. package/dist/lib/taskLedgerProposal.d.ts +102 -0
  184. package/dist/lib/taskLedgerProposal.d.ts.map +1 -0
  185. package/dist/lib/taskLedgerProposal.js +408 -0
  186. package/dist/lib/taskLedgerProposal.js.map +1 -0
  187. package/dist/lib/tasksFile.d.ts +23 -2
  188. package/dist/lib/tasksFile.d.ts.map +1 -1
  189. package/dist/lib/tasksFile.js +122 -10
  190. package/dist/lib/tasksFile.js.map +1 -1
  191. package/dist/mcp/registry.d.ts.map +1 -1
  192. package/dist/mcp/registry.js +110 -0
  193. package/dist/mcp/registry.js.map +1 -1
  194. package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
  195. package/native/safe-open/youmd_safe_open.c +224 -0
  196. package/package.json +11 -3
  197. package/scripts/build-safe-open.mjs +63 -0
  198. package/scripts/skillstack-sync/com.you.context-sync.plist +1 -1
  199. package/scripts/skillstack-sync/com.you.identity-sync.plist +1 -1
  200. package/scripts/skillstack-sync/com.you.orchestrator-watch.plist +1 -1
  201. package/scripts/skillstack-sync/com.you.realtime-sync.plist +7 -1
  202. package/scripts/skillstack-sync/com.you.skillstack-sync.plist +1 -1
  203. package/scripts/skillstack-sync/context-sync.sh +19 -7
  204. package/scripts/skillstack-sync/install-daemons-linux.sh +6 -0
  205. package/scripts/smoke-safe-open-node.cjs +50 -0
@@ -0,0 +1,518 @@
1
+ "use strict";
2
+ /**
3
+ * Read-only repository evidence for a single Project Brain goal.
4
+ *
5
+ * This is intentionally not an apply mechanism. Callers may create canonical
6
+ * documents and exact replacement proposals, but a repository owner must apply
7
+ * those proposals through the guarded proposal plane. The only paths this
8
+ * module will inspect are:
9
+ * project-context/goals/<goal-id>/goal.json
10
+ * project-context/goals/<goal-id>/events/NNNNNN.json
11
+ * project-context/goals/<goal-id>/reviews/<review-id>.json
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.GoalRegistryFileError = exports.GOAL_REGISTRY_PROPOSAL_VERSION = exports.GOAL_REGISTRY_REVIEW_VERSION = exports.GOAL_REGISTRY_REVIEW_SCHEMA = exports.GOAL_REGISTRY_EVENT_VERSION = exports.GOAL_REGISTRY_EVENT_SCHEMA = exports.GOAL_REGISTRY_GOAL_VERSION = exports.GOAL_REGISTRY_GOAL_SCHEMA = void 0;
48
+ exports.goalRegistryPaths = goalRegistryPaths;
49
+ exports.createGoalRegistryGoalDocument = createGoalRegistryGoalDocument;
50
+ exports.parseGoalRegistryGoal = parseGoalRegistryGoal;
51
+ exports.createGoalRegistryEventDocument = createGoalRegistryEventDocument;
52
+ exports.parseGoalRegistryEvent = parseGoalRegistryEvent;
53
+ exports.parseGoalRegistryReview = parseGoalRegistryReview;
54
+ exports.createGoalRegistryReviewDocument = createGoalRegistryReviewDocument;
55
+ exports.replayGoalRegistryEvents = replayGoalRegistryEvents;
56
+ exports.readGoalRegistry = readGoalRegistry;
57
+ exports.proposeGoalRegistryArtifact = proposeGoalRegistryArtifact;
58
+ const fs = __importStar(require("fs"));
59
+ const path = __importStar(require("path"));
60
+ const canonical_1 = require("./brain/canonical");
61
+ const discovery_1 = require("./brain/discovery");
62
+ const redact_1 = require("./redact");
63
+ exports.GOAL_REGISTRY_GOAL_SCHEMA = "https://you.md/schemas/project-goal/v1";
64
+ exports.GOAL_REGISTRY_GOAL_VERSION = "you-md/project-goal/v1";
65
+ exports.GOAL_REGISTRY_EVENT_SCHEMA = "https://you.md/schemas/project-goal-event/v1";
66
+ exports.GOAL_REGISTRY_EVENT_VERSION = "you-md/project-goal-event/v1";
67
+ exports.GOAL_REGISTRY_REVIEW_SCHEMA = "https://you.md/schemas/project-goal-review/v1";
68
+ exports.GOAL_REGISTRY_REVIEW_VERSION = "you-md/project-goal-review/v1";
69
+ exports.GOAL_REGISTRY_PROPOSAL_VERSION = "you-md/goal-registry-proposal/v1";
70
+ const PROJECT = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/;
71
+ const GOAL_ID = /^g-[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/;
72
+ const REVIEW_ID = /^r-[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/;
73
+ const HASH = /^sha256:[a-f0-9]{64}$/;
74
+ const AGENT_REF = /^agent:[A-Za-z0-9][A-Za-z0-9._:/-]{0,190}$/;
75
+ const STATUS = ["active", "blocked", "completion_claimed", "reviewing", "completed", "reopened"];
76
+ const EVENT_TYPES = ["created", "blocked", "resumed", "completion_claimed", "review_started", "review_passed", "review_failed", "owner_reopened"];
77
+ const MAX_BYTES = 1024 * 1024;
78
+ const ZERO_HASH = `sha256:${"0".repeat(64)}`;
79
+ const GOAL_REVISION_FIELDS = ["$schema", "schemaVersion", "kind", "id", "goalRef", "projectRef", "outcome", "successCriteria", "rootTaskRefs", "producerAgentRefs", "templateRef", "createdAt"];
80
+ const EVENT_HASH_FIELDS = ["$schema", "schemaVersion", "kind", "eventRef", "goalRef", "sequence", "eventType", "fromStatus", "toStatus", "actorAgentRef", "occurredAt", "baseRevision", "goalRevision", "previousEventHash", "evidenceRefs", "reviewRef", "criteriaResults", "remediationTaskRefs"];
81
+ class GoalRegistryFileError extends Error {
82
+ constructor(code, message) {
83
+ super(`${code}: ${message}`);
84
+ this.code = code;
85
+ this.name = "GoalRegistryFileError";
86
+ }
87
+ }
88
+ exports.GoalRegistryFileError = GoalRegistryFileError;
89
+ function fail(code, message) { throw new GoalRegistryFileError(code, message); }
90
+ function isRecord(value) { return Boolean(value) && typeof value === "object" && !Array.isArray(value); }
91
+ function digest(value) { return `sha256:${(0, canonical_1.sha256)(value)}`; }
92
+ function compare(a, b) { return a < b ? -1 : a > b ? 1 : 0; }
93
+ function date(value, where) {
94
+ if (typeof value !== "string" || new Date(value).toISOString() !== value)
95
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} must be canonical UTC`);
96
+ return value;
97
+ }
98
+ function nonempty(value, maximum, where) {
99
+ if (typeof value !== "string" || !value.trim() || value.length > maximum || /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/.test(value))
100
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} is invalid`);
101
+ return value;
102
+ }
103
+ function same(value, normalized, code, where) {
104
+ if ((0, canonical_1.canonicalize)(value) !== (0, canonical_1.canonicalize)(normalized))
105
+ fail(code, `${where} is not canonically sorted`);
106
+ }
107
+ function exactKeys(record, required, optional, where) {
108
+ const allowed = new Set([...required, ...optional]);
109
+ if (required.some((key) => !(key in record)) || Object.keys(record).some((key) => !allowed.has(key)))
110
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} has missing or unknown fields`);
111
+ }
112
+ function projectFromRef(projectRef) {
113
+ if (typeof projectRef !== "string" || !projectRef.startsWith("project:"))
114
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "projectRef is invalid");
115
+ const project = projectRef.slice("project:".length);
116
+ if (!PROJECT.test(project))
117
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "projectRef is invalid");
118
+ return project;
119
+ }
120
+ function goalRef(project, id) { return `goal:${project}/${id}`; }
121
+ function reviewRef(project, id, reviewId) { return `goal-review:${project}/${id}/${reviewId}`; }
122
+ function eventRef(project, id, sequence) { return `goal-event:${project}/${id}/${sequence}`; }
123
+ function taskRef(project, taskId) { return `task:${project}/${taskId}`; }
124
+ function criterionRef(project, goalId, criterionId) { return `criterion:${project}/${goalId}/${criterionId}`; }
125
+ function reviewIdFromRef(project, goalId, value) {
126
+ if (typeof value !== "string" || !value.startsWith(`goal-review:${project}/${goalId}/`))
127
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "reviewRef is invalid");
128
+ const id = value.slice(`goal-review:${project}/${goalId}/`.length);
129
+ if (!REVIEW_ID.test(id))
130
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "reviewRef is invalid");
131
+ return id;
132
+ }
133
+ function stableStrings(value, validate, where, nonEmpty = true) {
134
+ if (!Array.isArray(value) || value.length > 256 || (nonEmpty && !value.length) || value.some((entry) => typeof entry !== "string" || !validate(entry)))
135
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} is invalid`);
136
+ const normalized = [...value];
137
+ normalized.sort(compare);
138
+ if (new Set(normalized).size !== normalized.length)
139
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} contains duplicates`);
140
+ same(value, normalized, "GOAL_REGISTRY_INVALID_DOCUMENT", where);
141
+ return normalized;
142
+ }
143
+ function safePayload(value, canaries) {
144
+ const serialized = typeof value === "string" ? value : JSON.stringify(value);
145
+ const safeForRedaction = serialized.replace(/\b(?:sha256|goal|task):(?:[a-z0-9-]+\/)?[a-f0-9]{64}\b/g, "[OPAQUE_HASH]");
146
+ if ((0, redact_1.redactText)(safeForRedaction).hits > 0)
147
+ fail("GOAL_REGISTRY_SECRET_DETECTED", "goal registry evidence contains a secret or private-data pattern");
148
+ if (canaries.some((canary) => Boolean(canary) && serialized.includes(canary)))
149
+ fail("GOAL_REGISTRY_CANARY_DETECTED", "goal registry evidence contains a persistence canary");
150
+ }
151
+ function goalRegistryPaths(goalId, contextRoot = "project-context") {
152
+ if (!GOAL_ID.test(goalId) || !(0, discovery_1.isSafeRelativePath)(contextRoot))
153
+ fail("GOAL_REGISTRY_INVALID_PATH", "goal id or context root is unsafe");
154
+ const root = `${contextRoot}/goals/${goalId}`;
155
+ return {
156
+ root,
157
+ goal: `${root}/goal.json`,
158
+ events: `${root}/events`,
159
+ reviews: `${root}/reviews`,
160
+ event(sequence) {
161
+ if (!Number.isSafeInteger(sequence) || sequence < 1 || sequence > 999999)
162
+ fail("GOAL_REGISTRY_INVALID_PATH", "event sequence is invalid");
163
+ return `${root}/events/${String(sequence).padStart(6, "0")}.json`;
164
+ },
165
+ review(reviewId) {
166
+ if (!REVIEW_ID.test(reviewId))
167
+ fail("GOAL_REGISTRY_INVALID_PATH", "review id is invalid");
168
+ return `${root}/reviews/${reviewId}.json`;
169
+ },
170
+ };
171
+ }
172
+ function goalRevision(goal) {
173
+ return digest((0, canonical_1.canonicalize)(Object.fromEntries(GOAL_REVISION_FIELDS.filter((key) => key in goal).map((key) => [key, goal[key]]))));
174
+ }
175
+ function eventHash(event) {
176
+ return digest((0, canonical_1.canonicalize)(Object.fromEntries(EVENT_HASH_FIELDS.filter((key) => key in event).map((key) => [key, event[key]]))));
177
+ }
178
+ function evidence(value, where) {
179
+ if (!Array.isArray(value) || value.length > 256)
180
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} is invalid`);
181
+ const result = value.map((item, index) => {
182
+ if (!isRecord(item))
183
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where}[${index}] is invalid`);
184
+ exactKeys(item, ["evidenceRef", "sha256", "revision", "provenance"], [], `${where}[${index}]`);
185
+ if (!isRecord(item.provenance))
186
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where}[${index}].provenance is invalid`);
187
+ exactKeys(item.provenance, ["sourceRef", "sourceRevision"], [], `${where}[${index}].provenance`);
188
+ if (!HASH.test(String(item.sha256)) || !HASH.test(String(item.revision)) || !HASH.test(String(item.provenance.sourceRevision)))
189
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where}[${index}] hashes are invalid`);
190
+ return { evidenceRef: nonempty(item.evidenceRef, 500, `${where}[${index}].evidenceRef`), sha256: item.sha256, revision: item.revision, provenance: { sourceRef: nonempty(item.provenance.sourceRef, 500, `${where}[${index}].provenance.sourceRef`), sourceRevision: item.provenance.sourceRevision } };
191
+ });
192
+ const sorted = [...result].sort((a, b) => compare(a.evidenceRef, b.evidenceRef));
193
+ if (new Set(sorted.map((item) => item.evidenceRef)).size !== sorted.length)
194
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} contains duplicate evidence refs`);
195
+ same(value, sorted, "GOAL_REGISTRY_INVALID_DOCUMENT", where);
196
+ return sorted;
197
+ }
198
+ function criterionResults(value, goal, where) {
199
+ if (!Array.isArray(value) || value.length > 256)
200
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where} is invalid`);
201
+ const expected = new Map(goal.successCriteria.map((criterion) => [criterion.criterionRef, criterion.taskRefs]));
202
+ const result = value.map((item, index) => {
203
+ if (!isRecord(item))
204
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where}[${index}] is invalid`);
205
+ exactKeys(item, ["criterionRef", "passed", "taskRefs", "evidenceRefs"], [], `${where}[${index}]`);
206
+ if (typeof item.criterionRef !== "string" || typeof item.passed !== "boolean" || !expected.has(item.criterionRef))
207
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `${where}[${index}] is invalid`);
208
+ const taskRefs = stableStrings(item.taskRefs, (ref) => ref.startsWith(`task:${projectFromRef(goal.projectRef)}/`), `${where}[${index}].taskRefs`);
209
+ if ((0, canonical_1.canonicalize)(taskRefs) !== (0, canonical_1.canonicalize)(expected.get(item.criterionRef)))
210
+ fail("GOAL_REGISTRY_REVIEW_INVALID", `${where}[${index}] task refs do not match the goal criterion`);
211
+ return { criterionRef: item.criterionRef, passed: item.passed, taskRefs, evidenceRefs: evidence(item.evidenceRefs, `${where}[${index}].evidenceRefs`) };
212
+ });
213
+ const sorted = [...result].sort((a, b) => compare(a.criterionRef, b.criterionRef));
214
+ if (new Set(sorted.map((item) => item.criterionRef)).size !== sorted.length)
215
+ fail("GOAL_REGISTRY_REVIEW_INVALID", `${where} contains duplicate criterion results`);
216
+ if ((0, canonical_1.canonicalize)(sorted.map((item) => item.criterionRef)) !== (0, canonical_1.canonicalize)(goal.successCriteria.map((item) => item.criterionRef)))
217
+ fail("GOAL_REGISTRY_REVIEW_INVALID", `${where} does not cover all goal criteria`);
218
+ same(value, sorted, "GOAL_REGISTRY_INVALID_DOCUMENT", where);
219
+ return sorted;
220
+ }
221
+ function createGoalRegistryGoalDocument(input) {
222
+ const project = projectFromRef(input.projectRef);
223
+ if (!GOAL_ID.test(input.id))
224
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "goal id is invalid");
225
+ const base = { ...input, $schema: exports.GOAL_REGISTRY_GOAL_SCHEMA, schemaVersion: exports.GOAL_REGISTRY_GOAL_VERSION, kind: "project-goal", goalRef: goalRef(project, input.id), status: "active", updatedAt: input.createdAt };
226
+ const goal = { ...base, goalRevision: goalRevision(base) };
227
+ return parseGoalRegistryGoal(goal);
228
+ }
229
+ function parseGoalRegistryGoal(value, canaries = []) {
230
+ safePayload(value, canaries);
231
+ if (!isRecord(value))
232
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "goal must be an object");
233
+ exactKeys(value, ["$schema", "schemaVersion", "kind", "id", "goalRef", "projectRef", "goalRevision", "status", "outcome", "successCriteria", "rootTaskRefs", "producerAgentRefs", "createdAt", "updatedAt"], ["currentReviewRef", "templateRef"], "goal");
234
+ if (value.$schema !== exports.GOAL_REGISTRY_GOAL_SCHEMA || value.schemaVersion !== exports.GOAL_REGISTRY_GOAL_VERSION || value.kind !== "project-goal")
235
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "goal schema is invalid");
236
+ const project = projectFromRef(value.projectRef);
237
+ if (typeof value.id !== "string" || !GOAL_ID.test(value.id) || value.goalRef !== goalRef(project, value.id))
238
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "goal identity is invalid");
239
+ const goalId = value.id;
240
+ if (!STATUS.includes(value.status) || !HASH.test(String(value.goalRevision)))
241
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "goal state is invalid");
242
+ const criteriaRaw = value.successCriteria;
243
+ if (!Array.isArray(criteriaRaw) || !criteriaRaw.length || criteriaRaw.length > 256)
244
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "successCriteria is invalid");
245
+ const criteria = criteriaRaw.map((candidate, index) => {
246
+ if (!isRecord(candidate))
247
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `successCriteria[${index}] is invalid`);
248
+ exactKeys(candidate, ["criterionRef", "text", "taskRefs"], [], `successCriteria[${index}]`);
249
+ if (typeof candidate.criterionRef !== "string" || !candidate.criterionRef.startsWith(`criterion:${project}/${goalId}/c-`))
250
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `successCriteria[${index}].criterionRef is invalid`);
251
+ const candidateRef = candidate.criterionRef;
252
+ const criterionId = candidateRef.slice(`criterion:${project}/${goalId}/`.length);
253
+ if (!/^c-[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/.test(criterionId) || candidateRef !== criterionRef(project, goalId, criterionId))
254
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", `successCriteria[${index}].criterionRef is invalid`);
255
+ return { criterionRef: candidateRef, text: nonempty(candidate.text, 4000, `successCriteria[${index}].text`), taskRefs: stableStrings(candidate.taskRefs, (ref) => /^task:[A-Za-z0-9-]+\/t-[A-Za-z0-9_-]+$/.test(ref) && ref.startsWith(`task:${project}/`), `successCriteria[${index}].taskRefs`) };
256
+ });
257
+ const sortedCriteria = [...criteria].sort((a, b) => compare(a.criterionRef, b.criterionRef));
258
+ if (new Set(sortedCriteria.map((item) => item.criterionRef)).size !== sortedCriteria.length)
259
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "successCriteria contains duplicates");
260
+ same(criteriaRaw, sortedCriteria, "GOAL_REGISTRY_INVALID_DOCUMENT", "successCriteria");
261
+ const rootTaskRefs = stableStrings(value.rootTaskRefs, (ref) => /^task:[A-Za-z0-9-]+\/t-[A-Za-z0-9_-]+$/.test(ref) && ref.startsWith(`task:${project}/`), "rootTaskRefs");
262
+ const producerAgentRefs = stableStrings(value.producerAgentRefs, (ref) => AGENT_REF.test(ref), "producerAgentRefs");
263
+ const status = value.status;
264
+ const currentReviewRef = value.currentReviewRef === undefined ? undefined : reviewRef(project, goalId, reviewIdFromRef(project, goalId, value.currentReviewRef));
265
+ if (["reviewing", "completed"].includes(status) && !currentReviewRef)
266
+ fail("GOAL_REGISTRY_REVIEW_REQUIRED", "reviewing or completed goals require currentReviewRef");
267
+ if (value.templateRef !== undefined && (typeof value.templateRef !== "string" || !/^goal-template:(?:global|[a-z0-9][a-z0-9-]{0,62})\/(?:gt-)?[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/.test(value.templateRef)))
268
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "templateRef is invalid");
269
+ const goal = { $schema: exports.GOAL_REGISTRY_GOAL_SCHEMA, schemaVersion: exports.GOAL_REGISTRY_GOAL_VERSION, kind: "project-goal", id: goalId, goalRef: goalRef(project, goalId), projectRef: `project:${project}`, goalRevision: String(value.goalRevision), status, outcome: nonempty(value.outcome, 10000, "outcome"), successCriteria: sortedCriteria, rootTaskRefs, producerAgentRefs, ...(currentReviewRef ? { currentReviewRef } : {}), ...(value.templateRef ? { templateRef: value.templateRef } : {}), createdAt: date(value.createdAt, "createdAt"), updatedAt: date(value.updatedAt, "updatedAt") };
270
+ if (goal.updatedAt < goal.createdAt)
271
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "updatedAt precedes createdAt");
272
+ const expected = goalRevision({ ...goal, goalRevision: undefined, status: undefined, updatedAt: undefined, currentReviewRef: undefined });
273
+ if (goal.goalRevision !== expected)
274
+ fail("GOAL_REGISTRY_REVISION_MISMATCH", "goalRevision does not match immutable goal content");
275
+ return goal;
276
+ }
277
+ const TRANSITIONS = {
278
+ created: [null, "active"], blocked: ["active", "blocked"], resumed: ["blocked", "active"], completion_claimed: ["active", "completion_claimed"], review_started: ["completion_claimed", "reviewing"], review_passed: ["reviewing", "completed"], review_failed: ["reviewing", "reopened"], owner_reopened: ["completed", "reopened"],
279
+ };
280
+ function createGoalRegistryEventDocument(input) {
281
+ const project = input.goalRef.split(":")[1]?.split("/")[0] || "";
282
+ const id = input.goalRef.split("/")[1] || "";
283
+ if (!PROJECT.test(project) || !GOAL_ID.test(id) || !EVENT_TYPES.includes(input.eventType))
284
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "event identity is invalid");
285
+ const [fromStatus, toStatus] = TRANSITIONS[input.eventType];
286
+ const event = { ...input, $schema: exports.GOAL_REGISTRY_EVENT_SCHEMA, schemaVersion: exports.GOAL_REGISTRY_EVENT_VERSION, kind: "project-goal-event", eventRef: eventRef(project, id, input.sequence), fromStatus, toStatus };
287
+ return { ...event, eventHash: eventHash(event) };
288
+ }
289
+ function parseGoalRegistryEvent(value, goal, canaries = []) {
290
+ safePayload(value, canaries);
291
+ if (!isRecord(value))
292
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "event must be an object");
293
+ exactKeys(value, ["$schema", "schemaVersion", "kind", "eventRef", "goalRef", "sequence", "eventType", "fromStatus", "toStatus", "actorAgentRef", "occurredAt", "baseRevision", "goalRevision", "previousEventHash", "eventHash", "evidenceRefs"], ["reviewRef", "criteriaResults", "remediationTaskRefs"], "event");
294
+ if (value.$schema !== exports.GOAL_REGISTRY_EVENT_SCHEMA || value.schemaVersion !== exports.GOAL_REGISTRY_EVENT_VERSION || value.kind !== "project-goal-event" || value.goalRef !== goal.goalRef || !Number.isSafeInteger(value.sequence) || value.sequence < 1 || typeof value.eventType !== "string" || !EVENT_TYPES.includes(value.eventType) || !AGENT_REF.test(String(value.actorAgentRef)) || !HASH.test(String(value.baseRevision)) || !HASH.test(String(value.goalRevision)) || !HASH.test(String(value.eventHash)))
295
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "event fields are invalid");
296
+ const project = projectFromRef(goal.projectRef);
297
+ const eventType = value.eventType;
298
+ const [fromStatus, toStatus] = TRANSITIONS[eventType];
299
+ if (value.eventRef !== eventRef(project, goal.id, value.sequence) || value.fromStatus !== fromStatus || value.toStatus !== toStatus || value.goalRevision !== goal.goalRevision || (value.previousEventHash !== null && !HASH.test(String(value.previousEventHash))))
300
+ fail("GOAL_REGISTRY_INVALID_TRANSITION", "event identity, revision, or transition is invalid");
301
+ const parsed = { $schema: exports.GOAL_REGISTRY_EVENT_SCHEMA, schemaVersion: exports.GOAL_REGISTRY_EVENT_VERSION, kind: "project-goal-event", eventRef: eventRef(project, goal.id, value.sequence), goalRef: goal.goalRef, sequence: value.sequence, eventType, fromStatus, toStatus, actorAgentRef: value.actorAgentRef, occurredAt: date(value.occurredAt, "event.occurredAt"), baseRevision: value.baseRevision, goalRevision: goal.goalRevision, previousEventHash: value.previousEventHash, eventHash: value.eventHash, evidenceRefs: evidence(value.evidenceRefs, "event.evidenceRefs"), ...(value.reviewRef === undefined ? {} : { reviewRef: reviewRef(project, goal.id, reviewIdFromRef(project, goal.id, value.reviewRef)) }), ...(value.criteriaResults === undefined ? {} : { criteriaResults: criterionResults(value.criteriaResults, goal, "event.criteriaResults") }), ...(value.remediationTaskRefs === undefined ? {} : { remediationTaskRefs: stableStrings(value.remediationTaskRefs, (ref) => ref.startsWith(`task:${project}/`), "event.remediationTaskRefs") }) };
302
+ if (["review_started", "review_passed", "review_failed"].includes(eventType) && !parsed.reviewRef)
303
+ fail("GOAL_REGISTRY_REVIEW_REQUIRED", "review event requires reviewRef");
304
+ if (eventType === "review_failed" && !parsed.remediationTaskRefs?.length)
305
+ fail("GOAL_REGISTRY_REVIEW_REQUIRED", "rejected review requires remediation tasks");
306
+ const unsigned = Object.fromEntries(Object.entries(parsed).filter(([key]) => key !== "eventHash"));
307
+ if (parsed.eventHash !== eventHash(unsigned))
308
+ fail("GOAL_REGISTRY_EVENT_HASH_MISMATCH", "eventHash does not match canonical event content");
309
+ return parsed;
310
+ }
311
+ function parseGoalRegistryReview(value, goal, canaries = []) {
312
+ safePayload(value, canaries);
313
+ if (!isRecord(value))
314
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "review must be an object");
315
+ exactKeys(value, ["$schema", "schemaVersion", "kind", "reviewRef", "goalId", "goalRef", "goalRevision", "baseEventHash", "reviewerAgentRef", "producerAgentRefs", "verdict", "successCriteriaResults", "remediationTaskRefs", "reviewedAt"], [], "review");
316
+ if (value.$schema !== exports.GOAL_REGISTRY_REVIEW_SCHEMA || value.schemaVersion !== exports.GOAL_REGISTRY_REVIEW_VERSION || value.kind !== "project-goal-review" || value.goalId !== goal.id || value.goalRef !== goal.goalRef || value.goalRevision !== goal.goalRevision || !HASH.test(String(value.baseEventHash)) || !AGENT_REF.test(String(value.reviewerAgentRef)) || (value.verdict !== "approved" && value.verdict !== "rejected"))
317
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "review fields are invalid");
318
+ const project = projectFromRef(goal.projectRef);
319
+ const reviewId = reviewIdFromRef(project, goal.id, value.reviewRef);
320
+ const producerAgentRefs = stableStrings(value.producerAgentRefs, (ref) => AGENT_REF.test(ref), "review.producerAgentRefs");
321
+ if (producerAgentRefs.includes(value.reviewerAgentRef) || goal.producerAgentRefs.includes(value.reviewerAgentRef))
322
+ fail("GOAL_REGISTRY_REVIEWER_NOT_INDEPENDENT", "reviewer may not be a producer");
323
+ const result = criterionResults(value.successCriteriaResults, goal, "review.successCriteriaResults");
324
+ const remediationTaskRefs = stableStrings(value.remediationTaskRefs, (ref) => ref.startsWith(`task:${project}/`), "review.remediationTaskRefs", false);
325
+ const hasFailure = result.some((item) => !item.passed);
326
+ if ((value.verdict === "approved" && (hasFailure || remediationTaskRefs.length)) || (value.verdict === "rejected" && (!hasFailure || !remediationTaskRefs.length)))
327
+ fail("GOAL_REGISTRY_REVIEW_INVALID", "review verdict does not match results and remediation");
328
+ return { $schema: exports.GOAL_REGISTRY_REVIEW_SCHEMA, schemaVersion: exports.GOAL_REGISTRY_REVIEW_VERSION, kind: "project-goal-review", reviewRef: reviewRef(project, goal.id, reviewId), goalId: goal.id, goalRef: goal.goalRef, goalRevision: goal.goalRevision, baseEventHash: value.baseEventHash, reviewerAgentRef: value.reviewerAgentRef, producerAgentRefs, verdict: value.verdict, successCriteriaResults: result, remediationTaskRefs, reviewedAt: date(value.reviewedAt, "review.reviewedAt") };
329
+ }
330
+ /** Create a canonical review document in memory. It never writes to a repository. */
331
+ function createGoalRegistryReviewDocument(goal, input) {
332
+ const project = projectFromRef(goal.projectRef);
333
+ if (!REVIEW_ID.test(input.reviewId))
334
+ fail("GOAL_REGISTRY_INVALID_DOCUMENT", "review id is invalid");
335
+ const { reviewId, ...rest } = input;
336
+ return parseGoalRegistryReview({ ...rest, $schema: exports.GOAL_REGISTRY_REVIEW_SCHEMA, schemaVersion: exports.GOAL_REGISTRY_REVIEW_VERSION, kind: "project-goal-review", reviewRef: reviewRef(project, goal.id, reviewId), goalId: goal.id, goalRef: goal.goalRef, goalRevision: goal.goalRevision }, goal);
337
+ }
338
+ function assertReviewForEvent(event, review, goal, reviewer) {
339
+ if (!event.reviewRef || !review)
340
+ fail("GOAL_REGISTRY_REVIEW_REQUIRED", `review ${event.reviewRef || ""} is missing`);
341
+ if (review.reviewRef !== event.reviewRef || review.reviewerAgentRef !== event.actorAgentRef || reviewer && reviewer !== event.actorAgentRef || (event.eventType === "review_started" && ![event.previousEventHash, event.baseRevision].includes(review.baseEventHash)))
342
+ fail("GOAL_REGISTRY_REVIEW_INVALID", "review is not bound to its lifecycle event");
343
+ if (review.producerAgentRefs.some((agent) => !goal.producerAgentRefs.includes(agent)))
344
+ fail("GOAL_REGISTRY_REVIEW_INVALID", "review producer set differs from the goal");
345
+ if (event.eventType === "review_passed" && (review.verdict !== "approved" || (0, canonical_1.canonicalize)(event.criteriaResults) !== (0, canonical_1.canonicalize)(review.successCriteriaResults)))
346
+ fail("GOAL_REGISTRY_REVIEW_INVALID", "approval event does not exactly match its review");
347
+ if (event.eventType === "review_failed" && (review.verdict !== "rejected" || (0, canonical_1.canonicalize)(event.remediationTaskRefs) !== (0, canonical_1.canonicalize)(review.remediationTaskRefs)))
348
+ fail("GOAL_REGISTRY_REVIEW_INVALID", "rejection event does not exactly match its review");
349
+ }
350
+ function replayGoalRegistryEvents(goal, events, reviews, ownerAuthorized = false) {
351
+ const byReviewRef = new Map(reviews.map((review) => [review.reviewRef, review]));
352
+ if (byReviewRef.size !== reviews.length)
353
+ fail("GOAL_REGISTRY_REVIEW_INVALID", "duplicate review refs");
354
+ const ordered = [...events].sort((a, b) => a.sequence - b.sequence);
355
+ if ((0, canonical_1.canonicalize)(events) !== (0, canonical_1.canonicalize)(ordered))
356
+ fail("GOAL_REGISTRY_SEQUENCE_MISMATCH", "event directory must be canonically ordered");
357
+ let current = null;
358
+ let previousHash = null;
359
+ let reviewer;
360
+ const claimants = new Set();
361
+ for (const [index, event] of ordered.entries()) {
362
+ if (event.sequence !== index + 1)
363
+ fail("GOAL_REGISTRY_SEQUENCE_MISMATCH", "event sequences must be contiguous from one");
364
+ if (event.previousEventHash !== previousHash)
365
+ fail("GOAL_REGISTRY_EVENT_CHAIN_MISMATCH", "previousEventHash does not match the prior event");
366
+ if (event.baseRevision !== (previousHash || ZERO_HASH))
367
+ fail("GOAL_REGISTRY_STALE_BASE", "baseRevision does not match the prior event");
368
+ if (event.fromStatus !== current || event.fromStatus !== TRANSITIONS[event.eventType][0] || event.toStatus !== TRANSITIONS[event.eventType][1])
369
+ fail("GOAL_REGISTRY_INVALID_TRANSITION", "event transition does not match the current goal status");
370
+ if (event.eventType === "completion_claimed")
371
+ claimants.add(event.actorAgentRef);
372
+ if (event.eventType === "review_started") {
373
+ if (goal.producerAgentRefs.includes(event.actorAgentRef) || claimants.has(event.actorAgentRef))
374
+ fail("GOAL_REGISTRY_REVIEWER_NOT_INDEPENDENT", "reviewer may not produce or claim the goal");
375
+ reviewer = event.actorAgentRef;
376
+ assertReviewForEvent(event, byReviewRef.get(event.reviewRef), goal, reviewer);
377
+ }
378
+ if (event.eventType === "review_passed" || event.eventType === "review_failed")
379
+ assertReviewForEvent(event, byReviewRef.get(event.reviewRef), goal, reviewer);
380
+ if (event.eventType === "owner_reopened" && !ownerAuthorized)
381
+ fail("GOAL_REGISTRY_OWNER_AUTH_REQUIRED", "owner reopen cannot be trusted from repository evidence alone");
382
+ current = event.toStatus;
383
+ previousHash = event.eventHash;
384
+ }
385
+ if (ordered.length && goal.status !== current)
386
+ fail("GOAL_REGISTRY_INVALID_TRANSITION", "goal.json status does not equal the replayed event status");
387
+ if (!ordered.length && goal.status !== "active")
388
+ fail("GOAL_REGISTRY_INVALID_TRANSITION", "a non-active goal requires lifecycle evidence");
389
+ return { goal, events: ordered, reviews: [...reviews].sort((a, b) => compare(a.reviewRef, b.reviewRef)), status: current || "active", lastEventHash: previousHash, ...(ordered.length ? { lastEventRef: ordered[ordered.length - 1].eventRef } : {}) };
390
+ }
391
+ function inspectNoSymlinks(repoRoot, relativeDirectory, allowMissing = false) {
392
+ if (!(0, discovery_1.isSafeRelativePath)(relativeDirectory))
393
+ fail("GOAL_REGISTRY_INVALID_PATH", `${relativeDirectory} is unsafe`);
394
+ const root = fs.realpathSync.native(repoRoot);
395
+ let current = root;
396
+ for (const segment of relativeDirectory.split("/").filter(Boolean)) {
397
+ current = path.join(current, segment);
398
+ try {
399
+ const stat = fs.lstatSync(current);
400
+ if (stat.isSymbolicLink())
401
+ fail("GOAL_REGISTRY_SYMLINK_REFUSED", `${relativeDirectory} crosses a symlink`);
402
+ if (!stat.isDirectory())
403
+ fail("GOAL_REGISTRY_READ_FAILED", `${relativeDirectory} is not a directory`);
404
+ }
405
+ catch (error) {
406
+ if (error instanceof GoalRegistryFileError)
407
+ throw error;
408
+ if (allowMissing && error.code === "ENOENT")
409
+ return null;
410
+ fail("GOAL_REGISTRY_READ_FAILED", `${relativeDirectory} cannot be read`);
411
+ }
412
+ }
413
+ return current;
414
+ }
415
+ function safeRead(repoRoot, relative, required = true) {
416
+ if (!(0, discovery_1.isSafeRelativePath)(relative))
417
+ fail("GOAL_REGISTRY_INVALID_PATH", `${relative} is unsafe`);
418
+ try {
419
+ const root = fs.realpathSync.native(repoRoot);
420
+ const parent = relative.split("/").slice(0, -1).join("/");
421
+ if (!inspectNoSymlinks(root, parent, !required))
422
+ return null;
423
+ const target = path.resolve(root, relative);
424
+ if (!target.startsWith(`${root}${path.sep}`))
425
+ fail("GOAL_REGISTRY_INVALID_PATH", `${relative} escapes the repository`);
426
+ const claimed = fs.lstatSync(target);
427
+ if (claimed.isSymbolicLink())
428
+ fail("GOAL_REGISTRY_SYMLINK_REFUSED", `${relative} crosses a symlink`);
429
+ if (!claimed.isFile() || claimed.size > MAX_BYTES)
430
+ fail("GOAL_REGISTRY_READ_FAILED", `${relative} is not a bounded regular file`);
431
+ const noFollow = fs.constants.O_NOFOLLOW || 0;
432
+ const descriptor = fs.openSync(target, fs.constants.O_RDONLY | noFollow);
433
+ try {
434
+ const opened = fs.fstatSync(descriptor);
435
+ if (!opened.isFile() || opened.dev !== claimed.dev || opened.ino !== claimed.ino || opened.size > MAX_BYTES)
436
+ fail("GOAL_REGISTRY_READ_FAILED", `${relative} changed while opening`);
437
+ const bytes = Buffer.alloc(opened.size);
438
+ let offset = 0;
439
+ while (offset < opened.size) {
440
+ const count = fs.readSync(descriptor, bytes, offset, opened.size - offset, offset);
441
+ if (!count)
442
+ break;
443
+ offset += count;
444
+ }
445
+ if (offset !== opened.size)
446
+ fail("GOAL_REGISTRY_READ_FAILED", `${relative} is unreadable`);
447
+ const content = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
448
+ if (content.includes("\0"))
449
+ fail("GOAL_REGISTRY_READ_FAILED", `${relative} is not UTF-8 text`);
450
+ return content;
451
+ }
452
+ finally {
453
+ fs.closeSync(descriptor);
454
+ }
455
+ }
456
+ catch (error) {
457
+ if (error instanceof GoalRegistryFileError)
458
+ throw error;
459
+ const code = error.code;
460
+ if (!required && code === "ENOENT")
461
+ return null;
462
+ if (code === "ELOOP")
463
+ fail("GOAL_REGISTRY_SYMLINK_REFUSED", `${relative} crosses a symlink`);
464
+ fail("GOAL_REGISTRY_READ_FAILED", `${relative} verified read failed`);
465
+ }
466
+ }
467
+ function json(content, where) { try {
468
+ return JSON.parse(content);
469
+ }
470
+ catch {
471
+ fail("GOAL_REGISTRY_INVALID_JSON", `${where} is not valid JSON`);
472
+ } }
473
+ /** Read and replay one on-disk goal. This function never modifies the repository. */
474
+ function readGoalRegistry(repoRoot, goalId, options = {}) {
475
+ const paths = goalRegistryPaths(goalId, options.contextRoot || "project-context");
476
+ inspectNoSymlinks(repoRoot, paths.root);
477
+ const canaries = options.canaries || [];
478
+ const goal = parseGoalRegistryGoal(json(safeRead(repoRoot, paths.goal), paths.goal), canaries);
479
+ if (goal.id !== goalId)
480
+ fail("GOAL_REGISTRY_INVALID_PATH", "goal.json id does not match its canonical directory");
481
+ const readDirectory = (directory, kind) => {
482
+ const absolute = inspectNoSymlinks(repoRoot, directory, true);
483
+ if (!absolute)
484
+ return [];
485
+ const names = fs.readdirSync(absolute).sort(compare);
486
+ return names.map((name) => {
487
+ const valid = kind === "event" ? /^[0-9]{6}\.json$/.test(name) && name !== "000000.json" : /^r-[A-Za-z0-9][A-Za-z0-9_-]{0,94}\.json$/.test(name);
488
+ if (!valid)
489
+ fail("GOAL_REGISTRY_INVALID_PATH", `${directory}/${name} is not a canonical ${kind} artifact`);
490
+ const relative = `${directory}/${name}`;
491
+ const document = json(safeRead(repoRoot, relative), relative);
492
+ if (kind === "event") {
493
+ const event = parseGoalRegistryEvent(document, goal, canaries);
494
+ if (paths.event(event.sequence) !== relative)
495
+ fail("GOAL_REGISTRY_SEQUENCE_MISMATCH", `${relative} does not match event sequence ${event.sequence}`);
496
+ return event;
497
+ }
498
+ const review = parseGoalRegistryReview(document, goal, canaries);
499
+ if (paths.review(reviewIdFromRef(projectFromRef(goal.projectRef), goal.id, review.reviewRef)) !== relative)
500
+ fail("GOAL_REGISTRY_INVALID_PATH", `${relative} does not match reviewRef`);
501
+ return review;
502
+ });
503
+ };
504
+ return replayGoalRegistryEvents(goal, readDirectory(paths.events, "event"), readDirectory(paths.reviews, "review"), options.ownerAuthorized || false);
505
+ }
506
+ /** Produce a review-only exact replacement proposal for a canonical goal artifact. */
507
+ function proposeGoalRegistryArtifact(options) {
508
+ if (!/^project-context\/goals\/g-[A-Za-z0-9][A-Za-z0-9_-]{0,94}\/(?:goal\.json|events\/[0-9]{6}\.json|reviews\/r-[A-Za-z0-9][A-Za-z0-9_-]{0,94}\.json)$/.test(options.relativePath))
509
+ fail("GOAL_REGISTRY_INVALID_PATH", "proposal target is not a canonical goal registry artifact");
510
+ safePayload(options.content, options.canaries || []);
511
+ const existing = safeRead(options.repoRoot, options.relativePath, false);
512
+ const content = options.content.endsWith("\n") ? options.content : `${options.content}\n`;
513
+ if (existing === content)
514
+ return null;
515
+ const withoutRef = { schemaVersion: exports.GOAL_REGISTRY_PROPOSAL_VERSION, kind: "goal-registry-proposal", status: "proposed", authority: "review_only", applySupported: false, target: { path: options.relativePath, exists: existing !== null, owner: "repository", writePolicy: "propose", baseContentHash: digest(existing || "") }, replacement: { format: "whole_file", content, contentHash: digest(content) }, approval: { required: true, policy: "fresh_exact_replacement", reusable: false } };
516
+ return { ...withoutRef, proposalRef: `proposal:goal-registry/${(0, canonical_1.sha256)((0, canonical_1.canonicalize)(withoutRef))}` };
517
+ }
518
+ //# sourceMappingURL=goalRegistryFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goalRegistryFile.js","sourceRoot":"","sources":["../../src/lib/goalRegistryFile.ts"],"names":[],"mappings":"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"}