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.
- package/dist/commands/brain.d.ts.map +1 -1
- package/dist/commands/brain.js +91 -28
- package/dist/commands/brain.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +6 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/conversations.d.ts +5 -0
- package/dist/commands/conversations.d.ts.map +1 -0
- package/dist/commands/conversations.js +116 -0
- package/dist/commands/conversations.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +16 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/founder.d.ts +13 -0
- package/dist/commands/founder.d.ts.map +1 -0
- package/dist/commands/founder.js +189 -0
- package/dist/commands/founder.js.map +1 -0
- package/dist/commands/handoff.d.ts +5 -0
- package/dist/commands/handoff.d.ts.map +1 -0
- package/dist/commands/handoff.js +432 -0
- package/dist/commands/handoff.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +15 -0
- package/dist/commands/orchestrate.d.ts.map +1 -1
- package/dist/commands/orchestrate.js +294 -0
- package/dist/commands/orchestrate.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +8 -1
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/reconcile.d.ts +15 -0
- package/dist/commands/reconcile.d.ts.map +1 -0
- package/dist/commands/reconcile.js +260 -0
- package/dist/commands/reconcile.js.map +1 -0
- package/dist/commands/session.d.ts +28 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +895 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/stack.d.ts +2 -0
- package/dist/commands/stack.d.ts.map +1 -1
- package/dist/commands/stack.js +26 -0
- package/dist/commands/stack.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +11 -0
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/tasks.d.ts +57 -0
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +236 -31
- package/dist/commands/tasks.js.map +1 -1
- package/dist/generated/capability-registry.d.ts +311 -71
- package/dist/generated/capability-registry.d.ts.map +1 -1
- package/dist/generated/capability-registry.js +346 -71
- package/dist/generated/capability-registry.js.map +1 -1
- package/dist/index.js +113 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +362 -1
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +171 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/brain/adapters.d.ts +20 -1
- package/dist/lib/brain/adapters.d.ts.map +1 -1
- package/dist/lib/brain/adapters.js +113 -2
- package/dist/lib/brain/adapters.js.map +1 -1
- package/dist/lib/brain/approval-key-trust.d.ts +29 -0
- package/dist/lib/brain/approval-key-trust.d.ts.map +1 -0
- package/dist/lib/brain/approval-key-trust.js +139 -0
- package/dist/lib/brain/approval-key-trust.js.map +1 -0
- package/dist/lib/brain/cache.d.ts +2 -2
- package/dist/lib/brain/cache.d.ts.map +1 -1
- package/dist/lib/brain/cache.js +4 -4
- package/dist/lib/brain/cache.js.map +1 -1
- package/dist/lib/brain/content.d.ts +56 -0
- package/dist/lib/brain/content.d.ts.map +1 -0
- package/dist/lib/brain/content.js +362 -0
- package/dist/lib/brain/content.js.map +1 -0
- package/dist/lib/brain/descriptor-validator.d.ts +11 -0
- package/dist/lib/brain/descriptor-validator.d.ts.map +1 -0
- package/dist/lib/brain/descriptor-validator.js +185 -0
- package/dist/lib/brain/descriptor-validator.js.map +1 -0
- package/dist/lib/brain/discovery.d.ts.map +1 -1
- package/dist/lib/brain/discovery.js +103 -60
- package/dist/lib/brain/discovery.js.map +1 -1
- package/dist/lib/brain/index.d.ts +2 -0
- package/dist/lib/brain/index.d.ts.map +1 -1
- package/dist/lib/brain/index.js +8 -2
- package/dist/lib/brain/index.js.map +1 -1
- package/dist/lib/brain/proposal.d.ts +53 -5
- package/dist/lib/brain/proposal.d.ts.map +1 -1
- package/dist/lib/brain/proposal.js +341 -64
- package/dist/lib/brain/proposal.js.map +1 -1
- package/dist/lib/brain/safe-file.d.ts +25 -1
- package/dist/lib/brain/safe-file.d.ts.map +1 -1
- package/dist/lib/brain/safe-file.js +250 -30
- package/dist/lib/brain/safe-file.js.map +1 -1
- package/dist/lib/brain/safe-open.d.ts +2 -0
- package/dist/lib/brain/safe-open.d.ts.map +1 -0
- package/dist/lib/brain/safe-open.js +77 -0
- package/dist/lib/brain/safe-open.js.map +1 -0
- package/dist/lib/brain/safety.d.ts.map +1 -1
- package/dist/lib/brain/safety.js +5 -0
- package/dist/lib/brain/safety.js.map +1 -1
- package/dist/lib/brain/staged-apply.d.ts +2 -1
- package/dist/lib/brain/staged-apply.d.ts.map +1 -1
- package/dist/lib/brain/staged-apply.js +6 -3
- package/dist/lib/brain/staged-apply.js.map +1 -1
- package/dist/lib/brain/store.d.ts +3 -0
- package/dist/lib/brain/store.d.ts.map +1 -1
- package/dist/lib/brain/store.js +68 -0
- package/dist/lib/brain/store.js.map +1 -1
- package/dist/lib/brain/sync.d.ts +87 -0
- package/dist/lib/brain/sync.d.ts.map +1 -0
- package/dist/lib/brain/sync.js +238 -0
- package/dist/lib/brain/sync.js.map +1 -0
- package/dist/lib/brain/types.d.ts +23 -0
- package/dist/lib/brain/types.d.ts.map +1 -1
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +3 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/daemon.js +1 -1
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/goalRegistryFile.d.ts +169 -0
- package/dist/lib/goalRegistryFile.d.ts.map +1 -0
- package/dist/lib/goalRegistryFile.js +518 -0
- package/dist/lib/goalRegistryFile.js.map +1 -0
- package/dist/lib/goalsFile.d.ts +101 -0
- package/dist/lib/goalsFile.d.ts.map +1 -0
- package/dist/lib/goalsFile.js +413 -0
- package/dist/lib/goalsFile.js.map +1 -0
- package/dist/lib/handoff.d.ts +170 -0
- package/dist/lib/handoff.d.ts.map +1 -0
- package/dist/lib/handoff.js +316 -0
- package/dist/lib/handoff.js.map +1 -0
- package/dist/lib/machine-identity.d.ts +2 -0
- package/dist/lib/machine-identity.d.ts.map +1 -1
- package/dist/lib/machine-identity.js +13 -6
- package/dist/lib/machine-identity.js.map +1 -1
- package/dist/lib/onboarding.d.ts +4 -1
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +11 -3
- package/dist/lib/onboarding.js.map +1 -1
- package/dist/lib/orchestrator/loop.d.ts +7 -0
- package/dist/lib/orchestrator/loop.d.ts.map +1 -1
- package/dist/lib/orchestrator/loop.js +53 -0
- package/dist/lib/orchestrator/loop.js.map +1 -1
- package/dist/lib/orchestrator/run-journal.d.ts +178 -0
- package/dist/lib/orchestrator/run-journal.d.ts.map +1 -0
- package/dist/lib/orchestrator/run-journal.js +912 -0
- package/dist/lib/orchestrator/run-journal.js.map +1 -0
- package/dist/lib/orchestrator/supervisor.d.ts +11 -0
- package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
- package/dist/lib/orchestrator/supervisor.js +304 -116
- package/dist/lib/orchestrator/supervisor.js.map +1 -1
- package/dist/lib/orchestrator/tools.d.ts +2 -0
- package/dist/lib/orchestrator/tools.d.ts.map +1 -1
- package/dist/lib/orchestrator/tools.js +214 -1
- package/dist/lib/orchestrator/tools.js.map +1 -1
- package/dist/lib/redact.d.ts.map +1 -1
- package/dist/lib/redact.js +31 -6
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/remote-agent-event.d.ts +19 -0
- package/dist/lib/remote-agent-event.d.ts.map +1 -0
- package/dist/lib/remote-agent-event.js +85 -0
- package/dist/lib/remote-agent-event.js.map +1 -0
- package/dist/lib/remote-command.d.ts.map +1 -1
- package/dist/lib/remote-command.js +19 -0
- package/dist/lib/remote-command.js.map +1 -1
- package/dist/lib/remote-executor.d.ts +7 -1
- package/dist/lib/remote-executor.d.ts.map +1 -1
- package/dist/lib/remote-executor.js +391 -0
- package/dist/lib/remote-executor.js.map +1 -1
- package/dist/lib/sessionCheckpoint.d.ts +104 -0
- package/dist/lib/sessionCheckpoint.d.ts.map +1 -0
- package/dist/lib/sessionCheckpoint.js +191 -0
- package/dist/lib/sessionCheckpoint.js.map +1 -0
- package/dist/lib/sessionHandoff.d.ts +47 -0
- package/dist/lib/sessionHandoff.d.ts.map +1 -0
- package/dist/lib/sessionHandoff.js +305 -0
- package/dist/lib/sessionHandoff.js.map +1 -0
- package/dist/lib/stream.d.ts +3 -1
- package/dist/lib/stream.d.ts.map +1 -1
- package/dist/lib/stream.js +8 -3
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/taskLedgerProposal.d.ts +102 -0
- package/dist/lib/taskLedgerProposal.d.ts.map +1 -0
- package/dist/lib/taskLedgerProposal.js +408 -0
- package/dist/lib/taskLedgerProposal.js.map +1 -0
- package/dist/lib/tasksFile.d.ts +23 -2
- package/dist/lib/tasksFile.d.ts.map +1 -1
- package/dist/lib/tasksFile.js +122 -10
- package/dist/lib/tasksFile.js.map +1 -1
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +110 -0
- package/dist/mcp/registry.js.map +1 -1
- package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
- package/native/safe-open/youmd_safe_open.c +224 -0
- package/package.json +11 -3
- package/scripts/build-safe-open.mjs +63 -0
- package/scripts/skillstack-sync/com.you.context-sync.plist +1 -1
- package/scripts/skillstack-sync/com.you.identity-sync.plist +1 -1
- package/scripts/skillstack-sync/com.you.orchestrator-watch.plist +1 -1
- package/scripts/skillstack-sync/com.you.realtime-sync.plist +7 -1
- package/scripts/skillstack-sync/com.you.skillstack-sync.plist +1 -1
- package/scripts/skillstack-sync/context-sync.sh +19 -7
- package/scripts/skillstack-sync/install-daemons-linux.sh +6 -0
- 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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"}
|