briefops 2.0.0 → 2.1.2

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 (68) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +48 -1
  3. package/dist/cli.js +4 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/doctor.js +27 -0
  6. package/dist/commands/doctor.js.map +1 -1
  7. package/dist/commands/harness.d.ts +2 -0
  8. package/dist/commands/harness.js +56 -0
  9. package/dist/commands/harness.js.map +1 -0
  10. package/dist/commands/memory.js +20 -3
  11. package/dist/commands/memory.js.map +1 -1
  12. package/dist/commands/obs.d.ts +2 -0
  13. package/dist/commands/obs.js +51 -0
  14. package/dist/commands/obs.js.map +1 -0
  15. package/dist/core/codex.js +18 -2
  16. package/dist/core/codex.js.map +1 -1
  17. package/dist/core/codexPlugin.js +49 -1
  18. package/dist/core/codexPlugin.js.map +1 -1
  19. package/dist/core/exportTargets.js +20 -3
  20. package/dist/core/exportTargets.js.map +1 -1
  21. package/dist/core/harness.d.ts +27 -0
  22. package/dist/core/harness.js +342 -0
  23. package/dist/core/harness.js.map +1 -0
  24. package/dist/core/lock.d.ts +1 -0
  25. package/dist/core/lock.js +18 -4
  26. package/dist/core/lock.js.map +1 -1
  27. package/dist/core/memory.d.ts +4 -1
  28. package/dist/core/memory.js +54 -2
  29. package/dist/core/memory.js.map +1 -1
  30. package/dist/core/memoryHygiene.d.ts +11 -0
  31. package/dist/core/memoryHygiene.js +93 -0
  32. package/dist/core/memoryHygiene.js.map +1 -1
  33. package/dist/core/memoryProposal.js +21 -8
  34. package/dist/core/memoryProposal.js.map +1 -1
  35. package/dist/core/observability.d.ts +36 -0
  36. package/dist/core/observability.js +70 -0
  37. package/dist/core/observability.js.map +1 -0
  38. package/dist/core/securityDoctor.js +3 -5
  39. package/dist/core/securityDoctor.js.map +1 -1
  40. package/dist/core/strictDoctor.d.ts +22 -0
  41. package/dist/core/strictDoctor.js +95 -0
  42. package/dist/core/strictDoctor.js.map +1 -0
  43. package/dist/schemas/memory.d.ts +100 -0
  44. package/dist/schemas/memory.js +9 -1
  45. package/dist/schemas/memory.js.map +1 -1
  46. package/dist/schemas/memoryProposal.d.ts +115 -0
  47. package/dist/schemas/memoryProposal.js +2 -1
  48. package/dist/schemas/memoryProposal.js.map +1 -1
  49. package/dist/version.d.ts +1 -1
  50. package/dist/version.js +1 -1
  51. package/docs/compatibility.md +7 -3
  52. package/docs/file-format.md +3 -1
  53. package/docs/impact-report.md +140 -0
  54. package/docs/integrations/harnesses.md +9 -0
  55. package/docs/master-harness.md +610 -0
  56. package/docs/privacy-model.md +2 -0
  57. package/docs/quickstart.md +25 -0
  58. package/docs/release-checklist.md +16 -2
  59. package/docs/roadmap.md +12 -5
  60. package/docs/token-budget.md +8 -0
  61. package/package.json +2 -2
  62. package/plugins/briefops-codex/.codex-plugin/plugin.json +2 -1
  63. package/plugins/briefops-codex/README.md +10 -0
  64. package/plugins/briefops-codex/skills/briefops-continue-worker/SKILL.md +2 -0
  65. package/plugins/briefops-codex/skills/briefops-finish-task/SKILL.md +2 -0
  66. package/plugins/briefops-codex/skills/briefops-prime-context/SKILL.md +9 -1
  67. package/plugins/briefops-codex/skills/briefops-review-memory/SKILL.md +2 -0
  68. package/plugins/briefops-codex/skills/briefops-route-task/SKILL.md +35 -0
@@ -26,6 +26,7 @@ export function buildCodexPluginManifest() {
26
26
  category: "Developer Tools",
27
27
  capabilities: ["Read", "Write"],
28
28
  defaultPrompt: [
29
+ "Route this task through the BriefOps Master Harness.",
29
30
  "Start this task with the smallest useful BriefOps context.",
30
31
  "Finish this task and prepare memory for the next thread."
31
32
  ],
@@ -42,10 +43,47 @@ function trustBoundaryLines() {
42
43
  return [
43
44
  "The BriefOps plugin is a local CLI helper. It does not require network access and does not publish to a marketplace.",
44
45
  "",
46
+ "Before any BriefOps command, run `command -v briefops`. If `briefops` is not on `PATH`, stop and report `Status: setup-required`. Do not continue by silently skipping BriefOps. Ask the user to install `briefops`, use `npx briefops@latest`, or explicitly continue from an already supplied Brief/Spec/Plan.",
47
+ "",
45
48
  "BriefOps may update directory-local `.briefops/` memory. Use `--export-policy shared-only` before copying context outside the local workspace, and ask before applying skill patches.",
46
49
  ""
47
50
  ];
48
51
  }
52
+ function briefopsRouteTaskSkill() {
53
+ return [
54
+ "---",
55
+ "name: briefops-route-task",
56
+ "description: Use when starting Codex development work to classify the task and choose the smallest sufficient BriefOps Master Harness workflow",
57
+ "---",
58
+ "",
59
+ "# BriefOps Route Task",
60
+ "",
61
+ ...trustBoundaryLines(),
62
+ "Use this before implementation when the task may need memory, specification, planning, findings, verification, or handoff discipline.",
63
+ "",
64
+ "Run:",
65
+ "",
66
+ "```bash",
67
+ "briefops harness route --task \"<current user task>\"",
68
+ "```",
69
+ "",
70
+ "For explicit routing, pass a task type:",
71
+ "",
72
+ "```bash",
73
+ "briefops harness route --task \"<current user task>\" --type large-feature",
74
+ "```",
75
+ "",
76
+ "Use the route as a workflow contract:",
77
+ "",
78
+ "- Do not force full specification on tiny tasks.",
79
+ "- Do not skip goal ledgers, findings, visual evidence, or handoff when the route requires them.",
80
+ "- If repository evidence contradicts the inferred route, choose the safer route and say why.",
81
+ "- Treat `briefops prime` as the memory intake step and `briefops finish` as the work-log/memory closeout step.",
82
+ "",
83
+ "Supported task types: small-bug-fix, medium-feature, large-feature, refactor, dependency-upgrade, ui-change, test-repair, production-incident, documentation-task, architecture-decision, exploratory-research, code-review, release-preparation.",
84
+ ""
85
+ ].join("\n");
86
+ }
49
87
  function briefopsPrimeContextSkill() {
50
88
  return [
51
89
  "---",
@@ -58,7 +96,13 @@ function briefopsPrimeContextSkill() {
58
96
  ...trustBoundaryLines(),
59
97
  "Use BriefOps before broad repo/history inspection when a `.briefops` workspace exists or may exist.",
60
98
  "",
61
- "Run:",
99
+ "Run the environment gate first:",
100
+ "",
101
+ "```bash",
102
+ "command -v briefops",
103
+ "```",
104
+ "",
105
+ "If the CLI is present, run:",
62
106
  "",
63
107
  "```bash",
64
108
  "briefops prime --format codex --task \"<current user task>\" --max-tokens 800",
@@ -156,6 +200,10 @@ export function codexPluginFiles() {
156
200
  relativePath: ".codex-plugin/plugin.json",
157
201
  content: pluginManifestContent()
158
202
  },
203
+ {
204
+ relativePath: "skills/briefops-route-task/SKILL.md",
205
+ content: briefopsRouteTaskSkill()
206
+ },
159
207
  {
160
208
  relativePath: "skills/briefops-prime-context/SKILL.md",
161
209
  content: briefopsPrimeContextSkill()
@@ -1 +1 @@
1
- {"version":3,"file":"codexPlugin.js","sourceRoot":"","sources":["../../src/core/codexPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codexPlugin.js","sourceRoot":"","sources":["../../src/core/codexPlugin.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,17 @@ function policyLines(exportPolicy) {
21
21
  : "Local-private export was selected; keep this file local unless you review it before sharing."
22
22
  ];
23
23
  }
24
+ function environmentGateLines() {
25
+ return [
26
+ "Before any BriefOps command, run the environment gate:",
27
+ "",
28
+ "```bash",
29
+ "command -v briefops >/dev/null 2>&1",
30
+ "```",
31
+ "",
32
+ "If `briefops` is not on `PATH`, stop and report `Status: setup-required`. Do not continue by silently skipping BriefOps; ask the user to install `briefops`, use `npx briefops@latest`, or explicitly continue from an already supplied Brief/Spec/Plan."
33
+ ];
34
+ }
24
35
  function renderAgentsMd(options) {
25
36
  const worker = options.worker ?? "<worker>";
26
37
  return [
@@ -32,7 +43,9 @@ function renderAgentsMd(options) {
32
43
  "",
33
44
  "## Start Of Work",
34
45
  "",
35
- "Before broad repo/history inspection, run:",
46
+ ...environmentGateLines(),
47
+ "",
48
+ "After the environment gate passes, run before broad repo/history inspection:",
36
49
  "",
37
50
  "```bash",
38
51
  `briefops prime --format codex --task ${shellValue("<current task>")} --max-tokens 800`,
@@ -88,7 +101,9 @@ function renderClaudeMd(options) {
88
101
  "",
89
102
  "## Before Starting Work",
90
103
  "",
91
- "Run:",
104
+ ...environmentGateLines(),
105
+ "",
106
+ "After the environment gate passes, run:",
92
107
  "",
93
108
  "```bash",
94
109
  `briefops prime --format markdown --task ${shellValue("<current task>")} --max-tokens 800`,
@@ -164,7 +179,9 @@ function renderCursorRules(options) {
164
179
  "This repository uses BriefOps for local AI coding continuity.",
165
180
  policyNote.trim() ? policyNote.trimStart() : undefined,
166
181
  "",
167
- "Before broad repo/history inspection, run:",
182
+ ...environmentGateLines(),
183
+ "",
184
+ "After the environment gate passes and before broad repo/history inspection, run:",
168
185
  "",
169
186
  "```bash",
170
187
  `briefops prime --format codex --task ${shellValue("<current task>")} --max-tokens 800`,
@@ -1 +1 @@
1
- {"version":3,"file":"exportTargets.js","sourceRoot":"","sources":["../../src/core/exportTargets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exportTargets.js","sourceRoot":"","sources":["../../src/core/exportTargets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export type HarnessTaskType = "small-bug-fix" | "medium-feature" | "large-feature" | "refactor" | "dependency-upgrade" | "ui-change" | "test-repair" | "production-incident" | "documentation-task" | "architecture-decision" | "exploratory-research" | "code-review" | "release-preparation";
2
+ export type HarnessRoute = {
3
+ taskType: HarnessTaskType;
4
+ label: string;
5
+ spec: string;
6
+ plan: string;
7
+ goalLedger: string;
8
+ findings: string;
9
+ verification: string;
10
+ memoryUpdate: string;
11
+ artifacts: string[];
12
+ exitCriteria: string[];
13
+ finalResponse: string[];
14
+ };
15
+ export type HarnessRouteResult = {
16
+ task: string;
17
+ route: HarnessRoute;
18
+ inferred: boolean;
19
+ signals: string[];
20
+ };
21
+ export declare function harnessRoutes(): HarnessRoute[];
22
+ export declare function normalizeHarnessTaskType(value: string): HarnessTaskType;
23
+ export declare function routeHarnessTask(options: {
24
+ task: string;
25
+ taskType?: string;
26
+ }): HarnessRouteResult;
27
+ export declare function renderHarnessRoute(result: HarnessRouteResult): string;
@@ -0,0 +1,342 @@
1
+ import { BriefOpsError } from "./errors.js";
2
+ const routeTable = {
3
+ "small-bug-fix": {
4
+ taskType: "small-bug-fix",
5
+ label: "Small bug fix",
6
+ spec: "No",
7
+ plan: "Light",
8
+ goalLedger: "Optional",
9
+ findings: "Yes if debugging",
10
+ verification: "Level 2 targeted test",
11
+ memoryUpdate: "Work log",
12
+ artifacts: ["work log", "targeted verification evidence"],
13
+ exitCriteria: [
14
+ "Root cause or bounded symptom is understood.",
15
+ "Patch is scoped to the failing behavior.",
16
+ "Targeted verification passes or the limitation is explicit."
17
+ ],
18
+ finalResponse: ["changed behavior", "files changed", "targeted verification", "residual risk"]
19
+ },
20
+ "medium-feature": {
21
+ taskType: "medium-feature",
22
+ label: "Medium feature",
23
+ spec: "Light",
24
+ plan: "Yes",
25
+ goalLedger: "Yes",
26
+ findings: "Optional",
27
+ verification: "Level 2 or 3 based on surface area",
28
+ memoryUpdate: "Work log plus decisions",
29
+ artifacts: ["brief spec", "plan", "goal ledger", "verification evidence"],
30
+ exitCriteria: [
31
+ "Acceptance criteria are explicit.",
32
+ "Implementation follows repo conventions.",
33
+ "Relevant tests or checks pass."
34
+ ],
35
+ finalResponse: ["summary", "files changed", "acceptance coverage", "verification", "risks"]
36
+ },
37
+ "large-feature": {
38
+ taskType: "large-feature",
39
+ label: "Large feature",
40
+ spec: "Yes",
41
+ plan: "Yes",
42
+ goalLedger: "Yes",
43
+ findings: "Yes",
44
+ verification: "Level 3 full project verification",
45
+ memoryUpdate: "Decision, project state, handoff",
46
+ artifacts: ["spec", "plan", "tasks", "goal ledger", "findings log", "handoff"],
47
+ exitCriteria: [
48
+ "Spec and task decomposition exist.",
49
+ "All blocking findings are resolved.",
50
+ "Full relevant project verification has evidence."
51
+ ],
52
+ finalResponse: ["feature outcome", "files changed", "verification evidence", "open risks", "handoff"]
53
+ },
54
+ refactor: {
55
+ taskType: "refactor",
56
+ label: "Refactor",
57
+ spec: "No unless behavior changes",
58
+ plan: "Yes",
59
+ goalLedger: "Yes for multi-file",
60
+ findings: "Optional",
61
+ verification: "Level 3 regression verification",
62
+ memoryUpdate: "Work log plus decision if architecture changes",
63
+ artifacts: ["scope boundary", "risk notes", "goal ledger", "regression evidence"],
64
+ exitCriteria: [
65
+ "Behavior-preservation boundary is clear.",
66
+ "Diff is incremental and reviewable.",
67
+ "Regression checks cover touched behavior."
68
+ ],
69
+ finalResponse: ["refactor scope", "behavior preserved", "verification", "risks"]
70
+ },
71
+ "dependency-upgrade": {
72
+ taskType: "dependency-upgrade",
73
+ label: "Dependency upgrade",
74
+ spec: "No",
75
+ plan: "Yes",
76
+ goalLedger: "Yes",
77
+ findings: "Yes if breakage appears",
78
+ verification: "Level 3 full project verification",
79
+ memoryUpdate: "Decision plus work log",
80
+ artifacts: ["upgrade plan", "compatibility notes", "verification evidence"],
81
+ exitCriteria: [
82
+ "Upgrade scope and migration notes are recorded.",
83
+ "Lockfile/package changes are intentional.",
84
+ "Build, tests, and relevant runtime checks pass."
85
+ ],
86
+ finalResponse: ["dependency changes", "migration notes", "verification", "known risks"]
87
+ },
88
+ "ui-change": {
89
+ taskType: "ui-change",
90
+ label: "UI change",
91
+ spec: "Light",
92
+ plan: "Light",
93
+ goalLedger: "Optional",
94
+ findings: "Yes for visual defects",
95
+ verification: "Level 4 visual evidence",
96
+ memoryUpdate: "Work log, decision if design pattern changes",
97
+ artifacts: ["visual target", "screenshot or render evidence", "verification notes"],
98
+ exitCriteria: [
99
+ "UI renders in its natural environment.",
100
+ "Responsive or target viewport behavior is inspected.",
101
+ "Visual evidence backs the completion claim."
102
+ ],
103
+ finalResponse: ["UI outcome", "files changed", "visual evidence", "remaining visual risk"]
104
+ },
105
+ "test-repair": {
106
+ taskType: "test-repair",
107
+ label: "Test repair",
108
+ spec: "No",
109
+ plan: "Light",
110
+ goalLedger: "Optional",
111
+ findings: "Yes if failure cause is uncertain",
112
+ verification: "Level 2 targeted test",
113
+ memoryUpdate: "Work log",
114
+ artifacts: ["failure reproduction", "targeted test output"],
115
+ exitCriteria: [
116
+ "Failure is reproduced or clearly explained.",
117
+ "The test now asserts intended behavior.",
118
+ "Targeted test command passes."
119
+ ],
120
+ finalResponse: ["failure fixed", "tests changed", "verification", "risk of brittleness"]
121
+ },
122
+ "production-incident": {
123
+ taskType: "production-incident",
124
+ label: "Production incident",
125
+ spec: "No",
126
+ plan: "Incident plan",
127
+ goalLedger: "Yes",
128
+ findings: "Yes",
129
+ verification: "Level 4 evidence-based verification",
130
+ memoryUpdate: "Incident, decision, handoff",
131
+ artifacts: ["incident log", "findings log", "mitigation evidence", "handoff"],
132
+ exitCriteria: [
133
+ "Impact and mitigation are explicit.",
134
+ "Blocking findings are tracked.",
135
+ "Verification evidence matches the incident risk."
136
+ ],
137
+ finalResponse: ["impact", "mitigation", "verification evidence", "follow-up risks"]
138
+ },
139
+ "documentation-task": {
140
+ taskType: "documentation-task",
141
+ label: "Documentation task",
142
+ spec: "No",
143
+ plan: "No or light",
144
+ goalLedger: "No",
145
+ findings: "No",
146
+ verification: "Level 0 or 1 static inspection",
147
+ memoryUpdate: "Work log only if durable",
148
+ artifacts: ["doc diff", "link or render check if relevant"],
149
+ exitCriteria: [
150
+ "Docs match current behavior.",
151
+ "Links, examples, or commands are checked when practical."
152
+ ],
153
+ finalResponse: ["doc change", "files changed", "inspection or skipped verification reason"]
154
+ },
155
+ "architecture-decision": {
156
+ taskType: "architecture-decision",
157
+ label: "Architecture decision",
158
+ spec: "Yes",
159
+ plan: "Yes",
160
+ goalLedger: "Optional",
161
+ findings: "Research findings",
162
+ verification: "Level 1 source inspection",
163
+ memoryUpdate: "Decision plus architecture memory",
164
+ artifacts: ["decision record", "tradeoff table", "source evidence"],
165
+ exitCriteria: [
166
+ "Options and tradeoffs are explicit.",
167
+ "Decision is grounded in repo constraints.",
168
+ "Durable rationale is recorded."
169
+ ],
170
+ finalResponse: ["decision", "rationale", "sources", "follow-up implementation step"]
171
+ },
172
+ "exploratory-research": {
173
+ taskType: "exploratory-research",
174
+ label: "Exploratory research",
175
+ spec: "No",
176
+ plan: "Research plan",
177
+ goalLedger: "Optional",
178
+ findings: "Yes",
179
+ verification: "Level 1 source inspection",
180
+ memoryUpdate: "Findings or decision if durable",
181
+ artifacts: ["source notes", "findings", "recommendation"],
182
+ exitCriteria: [
183
+ "Sources are inspected directly.",
184
+ "Confirmed facts and interpretation are separated.",
185
+ "Recommendation names uncertainty."
186
+ ],
187
+ finalResponse: ["findings", "sources", "recommendation", "open questions"]
188
+ },
189
+ "code-review": {
190
+ taskType: "code-review",
191
+ label: "Code review",
192
+ spec: "No",
193
+ plan: "Review plan",
194
+ goalLedger: "Optional",
195
+ findings: "Yes",
196
+ verification: "Level 1 or 2 depending on reviewed change",
197
+ memoryUpdate: "Known issue if durable",
198
+ artifacts: ["findings log", "file and line evidence"],
199
+ exitCriteria: [
200
+ "Findings are actionable and severity-ordered.",
201
+ "No open finding is hidden in the summary.",
202
+ "Verification gaps are explicit."
203
+ ],
204
+ finalResponse: ["findings first", "open questions", "test gaps", "brief summary"]
205
+ },
206
+ "release-preparation": {
207
+ taskType: "release-preparation",
208
+ label: "Release preparation",
209
+ spec: "No",
210
+ plan: "Yes",
211
+ goalLedger: "Yes",
212
+ findings: "Yes",
213
+ verification: "Level 4 evidence-based verification",
214
+ memoryUpdate: "Project state plus handoff",
215
+ artifacts: ["release checklist", "verification evidence", "handoff"],
216
+ exitCriteria: [
217
+ "Release checklist is complete or exceptions are approved.",
218
+ "Build/test/audit evidence is recorded.",
219
+ "Remaining risks and rollback notes are clear."
220
+ ],
221
+ finalResponse: ["release readiness", "checks run", "evidence", "remaining blockers"]
222
+ }
223
+ };
224
+ const taskTypeAliases = {
225
+ bug: "small-bug-fix",
226
+ fix: "small-bug-fix",
227
+ "small-bug": "small-bug-fix",
228
+ feature: "medium-feature",
229
+ "medium-feature": "medium-feature",
230
+ "large-feature": "large-feature",
231
+ refactor: "refactor",
232
+ dependency: "dependency-upgrade",
233
+ deps: "dependency-upgrade",
234
+ "dependency-upgrade": "dependency-upgrade",
235
+ ui: "ui-change",
236
+ "ui-change": "ui-change",
237
+ test: "test-repair",
238
+ "test-repair": "test-repair",
239
+ incident: "production-incident",
240
+ "production-incident": "production-incident",
241
+ docs: "documentation-task",
242
+ documentation: "documentation-task",
243
+ "documentation-task": "documentation-task",
244
+ architecture: "architecture-decision",
245
+ adr: "architecture-decision",
246
+ "architecture-decision": "architecture-decision",
247
+ research: "exploratory-research",
248
+ "exploratory-research": "exploratory-research",
249
+ review: "code-review",
250
+ "code-review": "code-review",
251
+ release: "release-preparation",
252
+ "release-preparation": "release-preparation"
253
+ };
254
+ export function harnessRoutes() {
255
+ return Object.values(routeTable);
256
+ }
257
+ export function normalizeHarnessTaskType(value) {
258
+ const key = value.trim().toLowerCase().replace(/_/g, "-");
259
+ const taskType = taskTypeAliases[key];
260
+ if (!taskType) {
261
+ throw new BriefOpsError(`Unknown harness task type: ${value}`);
262
+ }
263
+ return taskType;
264
+ }
265
+ function matchTask(task) {
266
+ const text = task.toLowerCase();
267
+ const checks = [
268
+ ["production-incident", /\b(prod|production|incident|outage|rollback|hotfix|sev[0-9])\b/, "incident signal"],
269
+ ["release-preparation", /\b(release|ship|publish|npm pack|changelog|version bump|cut a release)\b/, "release signal"],
270
+ ["code-review", /\b(review|audit|pr|pull request|diff)\b/, "review signal"],
271
+ ["dependency-upgrade", /\b(upgrade|bump|dependency|dependencies|lockfile|package-lock|npm update|pnpm update|yarn upgrade)\b/, "dependency signal"],
272
+ ["ui-change", /\b(ui|visual|css|style|layout|responsive|screenshot|frontend|component)\b/, "ui signal"],
273
+ ["test-repair", /\b(test failure|failing test|flake|vitest|jest|pytest|unit test|integration test)\b/, "test signal"],
274
+ ["refactor", /\b(refactor|cleanup|restructure|rename|extract|split)\b/, "refactor signal"],
275
+ ["architecture-decision", /\b(architecture|adr|design decision|tradeoff|system design)\b/, "architecture signal"],
276
+ ["exploratory-research", /\b(research|investigate|compare|evaluate|look up|survey)\b/, "research signal"],
277
+ ["documentation-task", /\b(docs|documentation|readme|guide|manual)\b/, "documentation signal"],
278
+ ["large-feature", /\b(large feature|new module|major feature|multi-phase|end-to-end)\b/, "large feature signal"],
279
+ ["medium-feature", /\b(feature|add support|implement|build)\b/, "feature signal"],
280
+ ["small-bug-fix", /\b(bug|fix|broken|error|crash|regression)\b/, "bug signal"]
281
+ ];
282
+ for (const [taskType, pattern, signal] of checks) {
283
+ if (pattern.test(text)) {
284
+ return { taskType, signals: [signal] };
285
+ }
286
+ }
287
+ return { taskType: "medium-feature", signals: ["default medium-feature route"] };
288
+ }
289
+ export function routeHarnessTask(options) {
290
+ const task = options.task.trim();
291
+ if (!task) {
292
+ throw new BriefOpsError("Harness routing requires --task.");
293
+ }
294
+ if (options.taskType) {
295
+ const taskType = normalizeHarnessTaskType(options.taskType);
296
+ return {
297
+ task,
298
+ route: routeTable[taskType],
299
+ inferred: false,
300
+ signals: ["explicit task type"]
301
+ };
302
+ }
303
+ const matched = matchTask(task);
304
+ return {
305
+ task,
306
+ route: routeTable[matched.taskType],
307
+ inferred: true,
308
+ signals: matched.signals
309
+ };
310
+ }
311
+ export function renderHarnessRoute(result) {
312
+ return [
313
+ "# BriefOps Harness Route",
314
+ "",
315
+ `Task: ${result.task}`,
316
+ `Route: ${result.route.label}${result.inferred ? " (inferred)" : ""}`,
317
+ `Signals: ${result.signals.join(", ")}`,
318
+ "",
319
+ "## Workflow Depth",
320
+ "",
321
+ `- Spec: ${result.route.spec}`,
322
+ `- Plan: ${result.route.plan}`,
323
+ `- Goal ledger: ${result.route.goalLedger}`,
324
+ `- Findings: ${result.route.findings}`,
325
+ `- Verification: ${result.route.verification}`,
326
+ `- Memory update: ${result.route.memoryUpdate}`,
327
+ "",
328
+ "## Required Artifacts",
329
+ "",
330
+ ...result.route.artifacts.map((artifact) => `- ${artifact}`),
331
+ "",
332
+ "## Exit Criteria",
333
+ "",
334
+ ...result.route.exitCriteria.map((criterion) => `- ${criterion}`),
335
+ "",
336
+ "## Final Response Must Include",
337
+ "",
338
+ ...result.route.finalResponse.map((item) => `- ${item}`),
339
+ ""
340
+ ].join("\n");
341
+ }
342
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/core/harness.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export type WorkspaceLockOptions = {
4
4
  timeoutMs?: number;
5
5
  staleMs?: number;
6
6
  };
7
+ export declare function isStaleLockFile(filePath: string, staleMs: number): Promise<boolean>;
7
8
  export declare function withWorkspaceLock<T>(options: WorkspaceLockOptions, callback: () => Promise<T>): Promise<T>;
8
9
  export declare function cleanStaleLocks(options?: {
9
10
  cwd?: string;
package/dist/core/lock.js CHANGED
@@ -17,7 +17,7 @@ function lockPath(cwd, name) {
17
17
  function lockDir(cwd) {
18
18
  return path.join(workspacePaths(cwd).root, ".locks");
19
19
  }
20
- async function isStale(filePath, staleMs) {
20
+ export async function isStaleLockFile(filePath, staleMs) {
21
21
  if (!(await pathExists(filePath))) {
22
22
  return false;
23
23
  }
@@ -25,9 +25,23 @@ async function isStale(filePath, staleMs) {
25
25
  const raw = await readTextFile(filePath);
26
26
  const createdAt = raw.match(/^created_at: (.+)$/m)?.[1]?.trim();
27
27
  const created = createdAt ? Date.parse(createdAt) : Number.NaN;
28
- return Number.isNaN(created) || Date.now() - created > staleMs;
28
+ if (!Number.isNaN(created)) {
29
+ return Date.now() - created > staleMs;
30
+ }
29
31
  }
30
32
  catch {
33
+ // Fall back to mtime below. A competing writer may have created the lock
34
+ // before its metadata is readable, and fresh malformed locks must not be
35
+ // removed while still active.
36
+ }
37
+ try {
38
+ const stat = await fs.stat(filePath);
39
+ return Date.now() - stat.mtimeMs > staleMs;
40
+ }
41
+ catch (error) {
42
+ if (error.code === "ENOENT") {
43
+ return false;
44
+ }
31
45
  return true;
32
46
  }
33
47
  }
@@ -52,7 +66,7 @@ async function acquireLock(options) {
52
66
  if (error.code !== "EEXIST") {
53
67
  throw error;
54
68
  }
55
- if (await isStale(filePath, options.staleMs)) {
69
+ if (await isStaleLockFile(filePath, options.staleMs)) {
56
70
  await fs.unlink(filePath).catch(() => undefined);
57
71
  continue;
58
72
  }
@@ -89,7 +103,7 @@ export async function cleanStaleLocks(options = {}) {
89
103
  const entries = await fs.readdir(dirPath);
90
104
  for (const entry of entries.filter((item) => item.endsWith(".lock"))) {
91
105
  const filePath = path.join(dirPath, entry);
92
- if (await isStale(filePath, options.staleMs ?? defaultStaleMs)) {
106
+ if (await isStaleLockFile(filePath, options.staleMs ?? defaultStaleMs)) {
93
107
  await fs.unlink(filePath).catch(() => undefined);
94
108
  removed.push(filePath);
95
109
  }