briefops 1.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +88 -49
  3. package/SECURITY.md +4 -3
  4. package/dist/cli.js +6 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/bootstrap.d.ts +2 -0
  7. package/dist/commands/bootstrap.js +59 -0
  8. package/dist/commands/bootstrap.js.map +1 -0
  9. package/dist/commands/continue.js +5 -4
  10. package/dist/commands/continue.js.map +1 -1
  11. package/dist/commands/doctor.js +27 -0
  12. package/dist/commands/doctor.js.map +1 -1
  13. package/dist/commands/finish.js +9 -1
  14. package/dist/commands/finish.js.map +1 -1
  15. package/dist/commands/harness.d.ts +2 -0
  16. package/dist/commands/harness.js +56 -0
  17. package/dist/commands/harness.js.map +1 -0
  18. package/dist/commands/memory.js +20 -3
  19. package/dist/commands/memory.js.map +1 -1
  20. package/dist/commands/obs.d.ts +2 -0
  21. package/dist/commands/obs.js +51 -0
  22. package/dist/commands/obs.js.map +1 -0
  23. package/dist/commands/skill.js +1 -1
  24. package/dist/commands/skill.js.map +1 -1
  25. package/dist/core/bootstrap.d.ts +25 -0
  26. package/dist/core/bootstrap.js +69 -0
  27. package/dist/core/bootstrap.js.map +1 -0
  28. package/dist/core/codex.js +32 -5
  29. package/dist/core/codex.js.map +1 -1
  30. package/dist/core/codexPlugin.js +53 -12
  31. package/dist/core/codexPlugin.js.map +1 -1
  32. package/dist/core/exportTargets.js +21 -18
  33. package/dist/core/exportTargets.js.map +1 -1
  34. package/dist/core/harness.d.ts +27 -0
  35. package/dist/core/harness.js +342 -0
  36. package/dist/core/harness.js.map +1 -0
  37. package/dist/core/lock.d.ts +1 -0
  38. package/dist/core/lock.js +18 -4
  39. package/dist/core/lock.js.map +1 -1
  40. package/dist/core/memory.d.ts +4 -1
  41. package/dist/core/memory.js +54 -2
  42. package/dist/core/memory.js.map +1 -1
  43. package/dist/core/memoryHygiene.d.ts +11 -0
  44. package/dist/core/memoryHygiene.js +93 -0
  45. package/dist/core/memoryHygiene.js.map +1 -1
  46. package/dist/core/memoryProposal.js +21 -8
  47. package/dist/core/memoryProposal.js.map +1 -1
  48. package/dist/core/observability.d.ts +36 -0
  49. package/dist/core/observability.js +70 -0
  50. package/dist/core/observability.js.map +1 -0
  51. package/dist/core/prime.js +16 -9
  52. package/dist/core/prime.js.map +1 -1
  53. package/dist/core/securityDoctor.js +3 -5
  54. package/dist/core/securityDoctor.js.map +1 -1
  55. package/dist/core/strictDoctor.d.ts +22 -0
  56. package/dist/core/strictDoctor.js +95 -0
  57. package/dist/core/strictDoctor.js.map +1 -0
  58. package/dist/core/workflow.d.ts +4 -0
  59. package/dist/core/workflow.js +21 -2
  60. package/dist/core/workflow.js.map +1 -1
  61. package/dist/core/workspace.js +13 -1
  62. package/dist/core/workspace.js.map +1 -1
  63. package/dist/schemas/memory.d.ts +100 -0
  64. package/dist/schemas/memory.js +9 -1
  65. package/dist/schemas/memory.js.map +1 -1
  66. package/dist/schemas/memoryProposal.d.ts +115 -0
  67. package/dist/schemas/memoryProposal.js +2 -1
  68. package/dist/schemas/memoryProposal.js.map +1 -1
  69. package/dist/version.d.ts +1 -1
  70. package/dist/version.js +1 -1
  71. package/docs/codex-resume.md +1 -1
  72. package/docs/compatibility.md +10 -6
  73. package/docs/concept.md +2 -2
  74. package/docs/file-format.md +3 -1
  75. package/docs/handoff-briefs.md +1 -1
  76. package/docs/impact-report.md +140 -0
  77. package/docs/integrations/harnesses.md +14 -6
  78. package/docs/master-harness.md +610 -0
  79. package/docs/memory-lifecycle.md +11 -5
  80. package/docs/privacy-model.md +7 -3
  81. package/docs/quickstart.md +22 -6
  82. package/docs/release-checklist.md +18 -4
  83. package/docs/roadmap.md +12 -5
  84. package/docs/superpowers/plans/2026-06-08-briefops-oss-readiness.md +1 -1
  85. package/docs/token-budget.md +8 -0
  86. package/package.json +2 -2
  87. package/plugins/briefops-codex/.codex-plugin/plugin.json +2 -1
  88. package/plugins/briefops-codex/README.md +8 -6
  89. package/plugins/briefops-codex/skills/briefops-continue-worker/SKILL.md +3 -3
  90. package/plugins/briefops-codex/skills/briefops-finish-task/SKILL.md +4 -4
  91. package/plugins/briefops-codex/skills/briefops-prime-context/SKILL.md +4 -4
  92. package/plugins/briefops-codex/skills/briefops-review-memory/SKILL.md +8 -7
  93. package/plugins/briefops-codex/skills/briefops-route-task/SKILL.md +33 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,28 @@
4
4
 
5
5
  - No changes yet.
6
6
 
7
+ ## 2.1.1 - 2026-06-28
8
+
9
+ - Refresh the development dependency baseline for Node.js type definitions and Vitest lockfile resolution.
10
+ - Prepare the npm package version for the next patch publication after the GitHub-only `v2.1.0` tag.
11
+ - Clarify npm install, release readiness, and 2.1.x public documentation.
12
+
13
+ ## 2.1.0 - 2026-06-22
14
+
15
+ - Add `briefops harness route` and `briefops harness matrix` as a Codex-first Master Harness routing MVP.
16
+ - Add a Codex `briefops-route-task` skill for workflow-depth classification before implementation.
17
+ - Add `briefops obs continuity` for compression, continuity, queue, and memory hygiene observability without dumping private memory.
18
+ - Add `briefops doctor --strict --json` as a local release-readiness gate across stability, security, privacy, and memory hygiene.
19
+ - Add optional evidence anchors to memory items and memory proposals.
20
+ - Harden lock stale detection so fresh in-progress lock files are not removed during concurrent writes.
21
+ - Update release readiness docs and patch the esbuild lockfile to clear npm audit findings.
22
+
23
+ ## 2.0.0 - 2026-06-14
24
+
25
+ - Make `briefops finish` apply durable directory-local memory by default while retaining proposal files as an audit trail.
26
+ - Add `--memory-review` for explicit pending memory queues.
27
+ - Update Codex/plugin/router guidance to treat `.briefops/` memory as local repo state and reserve confirmation for external sharing or skill patches.
28
+
7
29
  ## 1.1.0 - 2026-06-10
8
30
 
9
31
  - Add `briefops doctor --stability` for bounded read-only workspace integrity checks.
package/README.md CHANGED
@@ -6,13 +6,11 @@
6
6
 
7
7
  BriefOps is a local-first CLI for AI coding agents with persistent memory, handoffs, and token-aware context.
8
8
 
9
- The goal is not just to generate a good brief. The goal is to let a user finish an AI coding task, carry recent work into the next handoff immediately, promote only reviewed items into durable memory, and start a fresh Codex or Claude Code thread where the same worker can continue with prior decisions, lessons, risks, and judgment profile.
9
+ The goal is not just to generate a good brief. The goal is to let a user finish an AI coding task, carry recent work into the next handoff immediately, promote useful items into directory-local durable memory, and start a fresh Codex or Claude Code thread where the same worker can continue with prior decisions, lessons, risks, and judgment profile.
10
10
 
11
11
  ```bash
12
12
  briefops prime --task "Start the next task." --format codex --max-tokens 800
13
13
  briefops finish ...
14
- briefops memory proposal-show latest
15
- briefops memory proposal-apply latest
16
14
  briefops continue --worker <worker> --task "<next task>" --pack
17
15
  ```
18
16
 
@@ -23,7 +21,7 @@ It should not maximize context. It preserves continuity by selecting the smalles
23
21
 
24
22
  - a local CLI
25
23
  - a file-based skill, project, memory, worker, and work-log store
26
- - a deterministic memory proposal and approval workflow
24
+ - a deterministic directory-local memory promotion workflow
27
25
  - a token-aware brief, handoff, Codex mission, and resume generator
28
26
  - a compact first-context primer for fresh Codex threads
29
27
  - a persistent worker continuity layer for fresh AI coding threads
@@ -48,12 +46,14 @@ BriefOps can generate Codex skill-plugin assets, but the plugin calls the local
48
46
 
49
47
  ## Release Status
50
48
 
51
- BriefOps 1.0 is intended for developers who want a local-first memory and context ledger for AI coding agents. The public CLI and file-format compatibility policy is documented in `docs/compatibility.md` and `docs/file-format.md`. The core safety principles are stable:
49
+ BriefOps 2.1.1 is the current npm-ready release for developers who want a local-first memory and context ledger for AI coding agents. It packages the 2.1 Master Harness routing, continuity observability, strict release-readiness checks, evidence anchors, and workspace-lock hardening that were prepared after 2.0.
50
+
51
+ The public CLI behavior and workspace file-format policy are documented in `docs/compatibility.md` and `docs/file-format.md`. The core safety principles are stable:
52
52
 
53
53
  - local files first
54
54
  - no hosted service required
55
55
  - no required MCP server
56
- - human-approved memory
56
+ - directory-local memory by default
57
57
  - shared-only export controls
58
58
  - deterministic CLI behavior
59
59
 
@@ -66,11 +66,18 @@ Before publishing a repository or sharing generated context, review:
66
66
  - `SECURITY.md` for vulnerability reporting and local data handling.
67
67
  - `CONTRIBUTING.md` for development checks and safety rules.
68
68
  - `CHANGELOG.md` for release notes.
69
- - `docs/file-format.md` and `docs/compatibility.md` for the 1.0 local data contract.
69
+ - `docs/file-format.md` and `docs/compatibility.md` for the local data contract.
70
70
  - `docs/privacy-model.md` for export-policy and local data boundaries.
71
71
 
72
72
  ## Install
73
73
 
74
+ From npm:
75
+
76
+ ```bash
77
+ npm install -g briefops
78
+ briefops --version
79
+ ```
80
+
74
81
  From this repository:
75
82
 
76
83
  ```bash
@@ -99,22 +106,22 @@ This is the primary BriefOps workflow.
99
106
  ### 1. Initialize
100
107
 
101
108
  ```bash
102
- briefops init
109
+ briefops bootstrap
103
110
  ```
104
111
 
105
- This creates a local `.briefops/` workspace.
112
+ This creates a local `.briefops/` workspace, installs Codex first-context guidance into `AGENTS.md`, writes `.briefops/codex/prompts/`, installs the deterministic local plugin bundle under `.briefops/codex/plugin/briefops`, adds `.briefops/` to `.gitignore`, and runs bounded privacy/stability checks.
106
113
 
107
- ### 2. Install Codex Guidance
114
+ If you want the manual path instead:
108
115
 
109
116
  ```bash
117
+ briefops init
110
118
  briefops codex install
111
119
  briefops codex plugin install
120
+ briefops doctor --privacy --fix-gitignore
121
+ briefops doctor --stability
112
122
  ```
113
123
 
114
- This creates or updates `AGENTS.md` with BriefOps guidance and creates `.briefops/codex/prompts/`.
115
- `briefops codex plugin install` writes a deterministic local plugin bundle under `.briefops/codex/plugin/briefops`. It does not publish to a marketplace and does not write to global Codex folders by default.
116
-
117
- ### 3. Create A Skill
124
+ ### 2. Create A Skill
118
125
 
119
126
  ```bash
120
127
  briefops skill create risk-review \
@@ -124,7 +131,7 @@ briefops skill create risk-review \
124
131
 
125
132
  A skill is a reusable working protocol.
126
133
 
127
- ### 4. Create Project Context
134
+ ### 3. Create Project Context
128
135
 
129
136
  ```bash
130
137
  briefops project create atlas-q \
@@ -134,7 +141,7 @@ briefops project create atlas-q \
134
141
 
135
142
  A project stores durable facts and constraints.
136
143
 
137
- ### 5. Create A Worker
144
+ ### 4. Create A Worker
138
145
 
139
146
  ```bash
140
147
  briefops worker create quant-reviewer \
@@ -147,7 +154,7 @@ briefops worker use quant-reviewer
147
154
 
148
155
  A worker is the persistent identity BriefOps carries across fresh threads: default project, skill bundle, style, lessons, risks, and judgment profile. `worker use` makes it the default worker for start-of-thread priming.
149
156
 
150
- ### 6. Prime A Fresh Codex Thread
157
+ ### 5. Prime A Fresh Codex Thread
151
158
 
152
159
  ```bash
153
160
  briefops prime \
@@ -156,11 +163,11 @@ briefops prime \
156
163
  --max-tokens 800
157
164
  ```
158
165
 
159
- Paste the compact prime context into Codex first. It is smaller than a full resume pack and is designed to reduce repeated history/context lookup.
166
+ Paste the compact prime context into Codex first. Repos bootstrapped with BriefOps also get `AGENTS.md` guidance that tells Codex to run this before broad repo/history inspection.
160
167
 
161
- Codex-format prime output includes an operating note for Codex: use the selected worker/project context, inspect only files needed for the task, and never apply memory or skill patches without user approval.
168
+ Codex-format prime output includes an operating note for Codex: use the selected worker/project context, inspect only files needed for the task, treat `.briefops/` memory as local repo state, and ask before exporting private memory or applying skill patches.
162
169
 
163
- ### 7. Start A Codex Mission When Needed
170
+ ### 6. Start A Codex Mission When Needed
164
171
 
165
172
  ```bash
166
173
  briefops codex mission \
@@ -173,7 +180,7 @@ briefops codex mission \
173
180
 
174
181
  Paste the generated mission prompt into Codex.
175
182
 
176
- ### 8. Finish The Task
183
+ ### 7. Finish The Task
177
184
 
178
185
  When Codex finishes, record what happened:
179
186
 
@@ -193,27 +200,25 @@ briefops finish \
193
200
 
194
201
  `finish` always writes a work log when `--task` and `--result` are valid. If the log has no durable memory candidates, `finish` warns and still prints the next `briefops continue` command.
195
202
 
196
- ### 9. Review And Apply Memory
203
+ ### 8. Local Memory Is Applied
197
204
 
198
- Memory is human-approved. Review the proposal:
205
+ `finish` applies durable memory candidates into `.briefops/memory/` by default and keeps the proposal file as an audit trail. The output reports how many memory items were created or skipped as duplicates.
199
206
 
200
- ```bash
201
- briefops memory proposal-show latest
202
- ```
203
-
204
- Apply it only when useful:
207
+ Use review mode only when you explicitly want a pending local queue:
205
208
 
206
209
  ```bash
207
- briefops memory proposal-apply latest
210
+ briefops finish --memory-review ...
208
211
  ```
209
212
 
210
- You can also use the convenience command:
213
+ Inspect, apply, or reject queued proposals when needed:
211
214
 
212
215
  ```bash
213
- briefops approve latest
216
+ briefops memory proposal-show latest
217
+ briefops memory proposal-apply latest
218
+ briefops memory proposal-reject latest
214
219
  ```
215
220
 
216
- ### 10. Continue In A Fresh Thread
221
+ ### 9. Continue In A Fresh Thread
217
222
 
218
223
  ```bash
219
224
  briefops continue \
@@ -222,7 +227,7 @@ briefops continue \
222
227
  --pack
223
228
  ```
224
229
 
225
- `continue --pack` checks continuity health, warns about pending memory proposals, refreshes worker intelligence, saves a handoff, saves a Codex resume prompt, saves a portable resume pack, and prints all generated paths.
230
+ `continue --pack` checks continuity health, notes any optional pending memory proposals, refreshes worker intelligence, saves a handoff, saves a Codex resume prompt, saves a portable resume pack, and prints all generated paths.
226
231
 
227
232
  ## Shared-Only Export Path
228
233
 
@@ -239,7 +244,7 @@ It omits private memory, local project file details, raw work logs, open risks,
239
244
 
240
245
  `local-private` is intended for local terminal/Codex use only and may include local private continuity context.
241
246
 
242
- BriefOps skills must never auto-approve memory proposals or skill patches.
247
+ BriefOps may update directory-local memory during normal local work. Explicit confirmation is reserved for sharing private memory outside the workspace or applying skill patches.
243
248
 
244
249
  ## Local Harness Export
245
250
 
@@ -252,10 +257,26 @@ briefops export cursor-rules
252
257
  briefops export all
253
258
  ```
254
259
 
255
- Exports are routers, not memory dumps. They tell local AI tools to run `briefops prime`, `briefops finish`, `briefops approve`, and `briefops continue --pack`.
260
+ Exports are routers, not memory dumps. They tell local AI tools to run `briefops prime`, `briefops finish`, and `briefops continue --pack`.
256
261
 
257
262
  They do not copy `.briefops` memory, raw logs, private decisions, incidents, handoffs, or worker summaries into `AGENTS.md`, `CLAUDE.md`, or Cursor rules. Export commands default to `--export-policy shared-only` because these files are often committed.
258
263
 
264
+ ## Master Harness Routing
265
+
266
+ Use the Master Harness router when Codex should decide the smallest sufficient workflow before implementation:
267
+
268
+ ```bash
269
+ briefops harness route --task "Fix the failing dashboard layout test."
270
+ briefops harness route --task "Build the release readiness flow." --type large-feature
271
+ briefops harness matrix
272
+ ```
273
+
274
+ The router classifies work across bug fixes, features, refactors, dependency upgrades, UI changes, test repairs, incidents, documentation, architecture decisions, research, code review, and release preparation. It returns the required specification, planning, goal ledger, findings, verification, memory update, artifacts, exit criteria, and final response contract.
275
+
276
+ In 2.1.x this is a routing contract, not a forced process engine. Tiny fixes can stay light; release, incident, UI, and larger feature work can require evidence, findings, and handoff discipline.
277
+
278
+ See `docs/master-harness.md` for the Codex-compatible BriefOps Master Harness architecture and MVP plan.
279
+
259
280
  ## Context Minimalism
260
281
 
261
282
  Inspect the built-in budget policy:
@@ -272,6 +293,14 @@ briefops compare context --worker quant-reviewer --task "Review this PR."
272
293
 
273
294
  BriefOps should not become the context bloat it was built to prevent. Use `prime` first, then generate a handoff or resume pack only when continuity needs more detail.
274
295
 
296
+ Inspect the live continuity signal for a worker:
297
+
298
+ ```bash
299
+ briefops obs continuity --worker quant-reviewer --task "Review this PR." --json
300
+ ```
301
+
302
+ This reports raw candidate context, compiled prime size, compression, continuity health, local queues, and memory hygiene signals without dumping private memory content.
303
+
275
304
  ## Memory Hygiene
276
305
 
277
306
  Not every task deserves durable memory. Use durable memory for decisions, lessons, incidents, open risks, and reusable constraints:
@@ -293,6 +322,7 @@ Run this before publishing a repository, sharing a pack, or attaching BriefOps c
293
322
  briefops doctor --privacy
294
323
  briefops doctor --privacy --fix-gitignore
295
324
  briefops doctor --stability
325
+ briefops doctor --strict --json
296
326
  ```
297
327
 
298
328
  BriefOps is local-first, but `.briefops/` may contain private logs and memory. Keep `.briefops/` out of source control unless you intentionally curated the contents.
@@ -301,6 +331,8 @@ BriefOps is local-first, but `.briefops/` may contain private logs and memory. K
301
331
 
302
332
  `doctor --stability` checks local workspace integrity, schema validity, duplicate memory ids, broken references, managed-path symlinks, and orphaned review artifacts. It keeps diagnostics bounded and does not add detailed doctor output to `prime`, handoff, resume, or pack context.
303
333
 
334
+ `doctor --strict` aggregates stability, security, privacy, and memory hygiene checks. Warnings keep `releaseReady` false in JSON output, which makes the command useful as a pre-release gate.
335
+
304
336
  ## Pre-Publish Readiness
305
337
 
306
338
  Before `npm publish`, run the local release checks and review the package contents:
@@ -308,7 +340,9 @@ Before `npm publish`, run the local release checks and review the package conten
308
340
  ```bash
309
341
  npm run build
310
342
  npm test
343
+ npm audit --audit-level=moderate
311
344
  npm pack --dry-run
345
+ npm run verify:release
312
346
  ```
313
347
 
314
348
  Run `npm audit --audit-level=moderate` or `npm run verify:release` only from an environment where sending dependency metadata to the npm registry is acceptable.
@@ -318,6 +352,7 @@ Confirm:
318
352
  - generated harness files are routers, not `.briefops` memory dumps
319
353
  - `briefops --version` matches `package.json`
320
354
  - `.briefops/` is ignored or intentionally curated
355
+ - `npm view briefops versions --json` does not already include the target version
321
356
  - `SECURITY.md`, `CHANGELOG.md`, and the release checklist reflect the shipped behavior
322
357
  - `npm pack --dry-run` includes `dist`, docs, examples, plugins, README, LICENSE, SECURITY, CONTRIBUTING, CODE_OF_CONDUCT, and CHANGELOG
323
358
 
@@ -329,13 +364,13 @@ BriefOps works best as a local memory ledger beside stronger harnesses such as C
329
364
 
330
365
  `finish` records what happened.
331
366
 
332
- It writes a work log, proposes durable memory when the log contains useful candidates, can propose a skill patch, can refresh the worker summary, and prints the next `briefops continue` command.
367
+ It writes a work log, applies durable directory-local memory when the log contains useful candidates, keeps a proposal audit file, can propose a skill patch, can refresh the worker summary, and prints the next `briefops continue` command.
333
368
 
334
- Recent work logs are available to the next local handoff immediately. Durable memory is separate: lessons, decisions, incidents, and reusable rules become long-lived memory only after review.
369
+ Recent work logs are available to the next local handoff immediately. Durable memory is the long-lived layer: lessons, decisions, incidents, and reusable rules are promoted locally by default unless `--memory-review` is used.
335
370
 
336
371
  `continue` prepares the same worker for a fresh thread.
337
372
 
338
- It inspects continuity health, warns about pending memory proposals, refreshes the worker summary, generates a handoff, and saves a Codex resume prompt. Add `--pack` when you also want one self-contained markdown file.
373
+ It inspects continuity health, notes optional pending memory proposals, refreshes the worker summary, generates a handoff, and saves a Codex resume prompt. Add `--pack` when you also want one self-contained markdown file.
339
374
 
340
375
  ```bash
341
376
  briefops finish \
@@ -353,7 +388,7 @@ briefops continue \
353
388
  --pack
354
389
  ```
355
390
 
356
- You can continue before applying a memory proposal. The handoff still includes recent local work such as results, lessons, decisions, open risks, incidents, and next steps. If pending memory proposals exist, `continue` prints explicit review, apply, and reject commands. It never applies memory automatically.
391
+ You can continue even if older or review-mode memory proposals are still pending. The handoff still includes recent local work such as results, lessons, decisions, open risks, incidents, and next steps. If pending memory proposals exist, `continue` prints inspect, apply, and reject commands without blocking the flow.
357
392
 
358
393
  ## Portable Resume Pack
359
394
 
@@ -386,11 +421,11 @@ exportable: false
386
421
 
387
422
  BriefOps does not add cloud sync or encryption.
388
423
 
389
- ## Approvals
424
+ ## Local Memory Queue And Skill Patches
390
425
 
391
- Memory and skill changes are human-approved.
426
+ `briefops finish` applies durable memory locally by default. Pending memory proposals still exist for audit/review mode and older workspaces.
392
427
 
393
- Use explicit proposal commands:
428
+ Use explicit proposal commands when you choose to inspect the queue:
394
429
 
395
430
  ```bash
396
431
  briefops memory proposal-show latest
@@ -402,7 +437,7 @@ briefops skill apply-patch risk-review --patch latest
402
437
  briefops skill reject-patch latest
403
438
  ```
404
439
 
405
- Or use the convenience approval command:
440
+ The convenience approval command remains available for pending queue items:
406
441
 
407
442
  ```bash
408
443
  briefops approve latest
@@ -410,7 +445,7 @@ briefops approve memory latest
410
445
  briefops approve skill-patch latest
411
446
  ```
412
447
 
413
- `briefops approve <id|latest>` tries memory first. If no matching memory proposal exists, it tries a skill patch. It applies at most one item.
448
+ `briefops approve <id|latest>` tries memory first. If no matching memory proposal exists, it tries a skill patch. It applies at most one item. Skill patches should be applied only with explicit user direction.
414
449
 
415
450
  ## Inbox
416
451
 
@@ -435,8 +470,8 @@ briefops inbox --skill risk-review
435
470
  | Worker Summary | Refreshed worker intelligence | `.briefops/workers/summaries/*.summary.md` |
436
471
  | Work Log | Completed task record | `.briefops/logs/*.yaml` |
437
472
  | Memory | Curated facts, decisions, lessons, incidents | `.briefops/memory/*.yaml` |
438
- | Memory Proposal | Human-reviewed memory candidate | `.briefops/memory-proposals/*.yaml` |
439
- | Skill Patch | Human-reviewed skill improvement | `.briefops/patches/*.patch.yaml` |
473
+ | Memory Proposal | Audit/review memory candidate | `.briefops/memory-proposals/*.yaml` |
474
+ | Skill Patch | Explicit-review skill improvement | `.briefops/patches/*.patch.yaml` |
440
475
  | Handoff | Fresh-thread continuity brief | `.briefops/handoffs/*.md` |
441
476
  | Codex Prompt | Mission or resume prompt | `.briefops/codex/prompts/*.md` |
442
477
  | Portable Pack | Self-contained resume markdown | `.briefops/codex/prompts/*resume-pack*.md` |
@@ -486,7 +521,7 @@ briefops memory show <memory-id>
486
521
  briefops memory update-status <memory-id> --status archived
487
522
  ```
488
523
 
489
- Promote useful work-log items through a proposal:
524
+ Promote useful work-log items through a proposal. `briefops finish` does this automatically by default; these commands are for manual or review-mode flows:
490
525
 
491
526
  ```bash
492
527
  briefops memory propose-from-log latest
@@ -496,7 +531,7 @@ briefops memory proposal-apply <proposal-id|latest>
496
531
  briefops memory proposal-reject <proposal-id|latest>
497
532
  ```
498
533
 
499
- Extraction is deterministic and local. Lessons, decisions, incidents, open risks, prefixed notes, and policy-like next steps can become proposal items. Proposal generation and approval are local file-backed operations protected by workspace locks.
534
+ Extraction is deterministic and local. Lessons, decisions, incidents, open risks, prefixed notes, and policy-like next steps can become proposal items. Proposal generation and application are local file-backed operations protected by workspace locks.
500
535
 
501
536
  ## Skills And Skill Patches
502
537
 
@@ -659,6 +694,9 @@ When generated briefs, handoffs, or resumes are too large, BriefOps trims lower-
659
694
  +-- briefs/
660
695
  +-- codex/
661
696
  | +-- prompts/
697
+ | +-- prime.md
698
+ | +-- mission.md
699
+ | +-- plan.md
662
700
  +-- evals/
663
701
  | +-- results/
664
702
  +-- patches/
@@ -675,6 +713,7 @@ Because `.briefops/` is local/private, Codex does not automatically see it. Prov
675
713
  ## Command Reference
676
714
 
677
715
  ```bash
716
+ briefops bootstrap
678
717
  briefops init
679
718
  briefops doctor
680
719
  briefops doctor --stability
@@ -768,7 +807,7 @@ Workspace not found:
768
807
  briefops init
769
808
  ```
770
809
 
771
- Pending memory before continuing:
810
+ Optional pending memory before continuing:
772
811
 
773
812
  ```bash
774
813
  briefops memory proposal-list --status proposed
package/SECURITY.md CHANGED
@@ -6,8 +6,9 @@ BriefOps is a local-first CLI. It stores project memory, work logs, generated pr
6
6
 
7
7
  | Version | Supported |
8
8
  | --- | --- |
9
- | 1.x | Security fixes accepted |
10
- | 0.2.x alpha | Not supported; upgrade to 1.x |
9
+ | 2.x | Security fixes accepted |
10
+ | 1.x | Security fixes accepted for critical issues |
11
+ | 0.2.x alpha | Not supported; upgrade to 2.x |
11
12
 
12
13
  ## Reporting A Vulnerability
13
14
 
@@ -44,7 +45,7 @@ See `docs/privacy-model.md` for the full 1.0 privacy contract.
44
45
 
45
46
  `briefops export agents-md`, `briefops export claude-md`, `briefops export cursor-rules`, and `briefops export all` generate router files for local AI coding harnesses.
46
47
 
47
- These files are intended to be safe to commit by default. They should contain command guidance and approval boundaries, not raw `.briefops/` memory, work logs, handoffs, resume packs, private decisions, private incidents, or worker summaries.
48
+ These files are intended to be safe to commit by default. They should contain command guidance and explicit export/skill-patch boundaries, not raw `.briefops/` memory, work logs, handoffs, resume packs, private decisions, private incidents, or worker summaries.
48
49
 
49
50
  If you use `--export-policy local-private`, review the generated files before sharing them outside the local machine.
50
51
 
package/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Command } from "commander";
2
2
  import { registerApproveCommand } from "./commands/approve.js";
3
3
  import { registerBriefCommands } from "./commands/brief.js";
4
+ import { registerBootstrapCommand } from "./commands/bootstrap.js";
4
5
  import { registerCodexCommands } from "./commands/codex.js";
5
6
  import { registerCompareCommands } from "./commands/compare.js";
6
7
  import { registerContinueCommand } from "./commands/continue.js";
@@ -8,12 +9,14 @@ import { registerDoctorCommand } from "./commands/doctor.js";
8
9
  import { registerEvalCommands } from "./commands/eval.js";
9
10
  import { registerExportCommands } from "./commands/export.js";
10
11
  import { registerFinishCommand } from "./commands/finish.js";
12
+ import { registerHarnessCommands } from "./commands/harness.js";
11
13
  import { registerInitCommand } from "./commands/init.js";
12
14
  import { registerHandoffCommands } from "./commands/handoff.js";
13
15
  import { registerInboxCommand } from "./commands/inbox.js";
14
16
  import { registerInspectCommands } from "./commands/inspect.js";
15
17
  import { registerLogCommands } from "./commands/log.js";
16
18
  import { registerMemoryCommands } from "./commands/memory.js";
19
+ import { registerObsCommands } from "./commands/obs.js";
17
20
  import { registerPackCommands } from "./commands/pack.js";
18
21
  import { registerPrimeCommand } from "./commands/prime.js";
19
22
  import { registerProjectCommands } from "./commands/project.js";
@@ -26,17 +29,20 @@ export function buildProgram() {
26
29
  .name("briefops")
27
30
  .description("Local-first, token-aware brief compiler for AI coding workflows.")
28
31
  .version(briefopsVersion);
32
+ registerBootstrapCommand(program);
29
33
  registerInitCommand(program);
30
34
  registerDoctorCommand(program);
31
35
  registerPrimeCommand(program);
32
36
  registerApproveCommand(program);
33
37
  registerFinishCommand(program);
38
+ registerHarnessCommands(program);
34
39
  registerContinueCommand(program);
35
40
  registerExportCommands(program);
36
41
  registerInboxCommand(program);
37
42
  registerSkillCommands(program);
38
43
  registerProjectCommands(program);
39
44
  registerMemoryCommands(program);
45
+ registerObsCommands(program);
40
46
  registerBriefCommands(program);
41
47
  registerHandoffCommands(program);
42
48
  registerCodexCommands(program);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,kEAAkE,CAAC;SAC/E,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,YAAY,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerBootstrapCommand(program: Command): void;
@@ -0,0 +1,59 @@
1
+ import { bootstrapWorkspace } from "../core/bootstrap.js";
2
+ import { printTable } from "./shared.js";
3
+ export function registerBootstrapCommand(program) {
4
+ program
5
+ .command("bootstrap")
6
+ .description("Initialize BriefOps and install first-context Codex guidance for this repo.")
7
+ .option("--force", "Update existing generated guidance/plugin files when safe.")
8
+ .option("--no-codex", "Skip AGENTS.md Codex guidance and prompt pack installation.")
9
+ .option("--no-plugin", "Skip local Codex plugin bundle installation.")
10
+ .option("--no-fix-gitignore", "Do not add `.briefops/` to .gitignore.")
11
+ .option("--no-doctor", "Skip privacy and stability doctor checks.")
12
+ .action(async (options) => {
13
+ const result = await bootstrapWorkspace({
14
+ force: Boolean(options.force),
15
+ codex: options.codex,
16
+ plugin: options.plugin,
17
+ fixGitignore: options.fixGitignore,
18
+ doctor: options.doctor
19
+ });
20
+ console.log("BriefOps bootstrap complete.");
21
+ printTable([
22
+ ["Item", "Status", "Path"],
23
+ ["Workspace", "ready", result.root],
24
+ ["Codex guidance", result.agentsPath ? "installed" : "skipped", result.agentsPath ?? "-"],
25
+ ["Codex prompts", result.promptDir ? "ready" : "skipped", result.promptDir ?? "-"],
26
+ ["Codex plugin", result.pluginRoot ? "installed" : "skipped", result.pluginRoot ?? "-"],
27
+ [".gitignore", result.gitignorePath ? "updated" : "skipped", result.gitignorePath ?? "-"],
28
+ [
29
+ "Stability doctor",
30
+ result.stability ? (result.stability.ok ? "ok" : "fail") : "skipped",
31
+ result.stability ? `${result.stability.checks.length} check(s)` : "-"
32
+ ],
33
+ [
34
+ "Privacy doctor",
35
+ result.privacy ? (result.privacy.ok ? "ok" : "fail") : "skipped",
36
+ result.privacy ? `${result.privacy.checks.length} check(s)` : "-"
37
+ ]
38
+ ]);
39
+ if (result.warnings.length > 0) {
40
+ console.log("");
41
+ console.log("Warnings:");
42
+ for (const warning of result.warnings) {
43
+ console.log(`- ${warning}`);
44
+ }
45
+ }
46
+ console.log("");
47
+ console.log("Next commands:");
48
+ for (const command of result.nextCommands) {
49
+ console.log(`- ${command}`);
50
+ }
51
+ if (result.stability && !result.stability.ok) {
52
+ process.exitCode = 1;
53
+ }
54
+ if (result.privacy && !result.privacy.ok) {
55
+ process.exitCode = 1;
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -38,16 +38,17 @@ export function registerContinueCommand(program) {
38
38
  }
39
39
  if (result.pendingMemoryProposals > 0) {
40
40
  console.log("");
41
- console.log("Pending memory proposals should be reviewed before continuing.");
41
+ console.log("Pending local memory proposals found.");
42
+ console.log("They do not block continuing; apply or reject them when useful.");
42
43
  console.log("");
43
- console.log("Review:");
44
+ console.log("Inspect:");
44
45
  console.log("briefops memory proposal-list --status proposed");
45
46
  console.log("briefops memory proposal-show latest");
46
47
  console.log("");
47
- console.log("Apply if appropriate:");
48
+ console.log("Apply locally:");
48
49
  console.log("briefops memory proposal-apply latest");
49
50
  console.log("");
50
- console.log("Reject if not useful:");
51
+ console.log("Reject:");
51
52
  console.log("briefops memory proposal-reject latest");
52
53
  }
53
54
  console.log("");
@@ -1 +1 @@
1
- {"version":3,"file":"continue.js","sourceRoot":"","sources":["../../src/commands/continue.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oGAAoG,CAAC;SACjH,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;SAC9E,cAAc,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SAC3D,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;SAC7C,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,IAAI,CAAC;SAC3E,MAAM,CAAC,eAAe,EAAE,mBAAmB,EAAE,MAAM,CAAC;SACpD,MAAM,CAAC,6BAA6B,EAAE,8BAA8B,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,SAAS,EAAE,6CAA6C,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,kDAAkD,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,OAAO,EAAE,OAAO,CAAC,OAA6B;YAC9C,MAAM,EAAE,OAAO,CAAC,MAAgB;YAChC,IAAI,EAAE,OAAO,CAAC,IAAc;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAgB;YAChC,IAAI,EAAE,OAAO,CAAC,IAA0B;YACxC,iBAAiB,EAAE,OAAO,CAAC,iBAAuC;YAClE,UAAU,EAAE,OAAO,CAAC,MAAM;gBACxB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAgB,CAAC;gBACvD,CAAC,CAAC,SAAS;YACb,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7B,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SAC5B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"continue.js","sourceRoot":"","sources":["../../src/commands/continue.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oGAAoG,CAAC;SACjH,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;SAC9E,cAAc,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SAC3D,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;SAC7C,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,IAAI,CAAC;SAC3E,MAAM,CAAC,eAAe,EAAE,mBAAmB,EAAE,MAAM,CAAC;SACpD,MAAM,CAAC,6BAA6B,EAAE,8BAA8B,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,SAAS,EAAE,6CAA6C,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,kDAAkD,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,OAAO,EAAE,OAAO,CAAC,OAA6B;YAC9C,MAAM,EAAE,OAAO,CAAC,MAAgB;YAChC,IAAI,EAAE,OAAO,CAAC,IAAc;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAgB;YAChC,IAAI,EAAE,OAAO,CAAC,IAA0B;YACxC,iBAAiB,EAAE,OAAO,CAAC,iBAAuC;YAClE,UAAU,EAAE,OAAO,CAAC,MAAM;gBACxB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAgB,CAAC;gBACvD,CAAC,CAAC,SAAS;YACb,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7B,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SAC5B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -3,6 +3,7 @@ import { memoryCategories, workspacePaths } from "../core/paths.js";
3
3
  import { fixBriefOpsGitignore, runPrivacyDoctor } from "../core/privacyDoctor.js";
4
4
  import { runSecurityDoctor } from "../core/securityDoctor.js";
5
5
  import { runStabilityDoctor } from "../core/stabilityDoctor.js";
6
+ import { runStrictDoctor } from "../core/strictDoctor.js";
6
7
  import { pathExists } from "../core/storage.js";
7
8
  import { printTable } from "./shared.js";
8
9
  export function registerDoctorCommand(program) {
@@ -15,7 +16,33 @@ export function registerDoctorCommand(program) {
15
16
  .option("--fix-stale-locks", "Remove stale BriefOps workspace locks before reporting security checks.")
16
17
  .option("--privacy", "Run privacy checks for local memory and share safety.")
17
18
  .option("--fix-gitignore", "Add `.briefops/` to .gitignore when running --privacy.")
19
+ .option("--strict", "Run stability, security, privacy, and memory hygiene checks as one release-readiness gate.")
20
+ .option("--json", "Print JSON output for --strict.")
18
21
  .action(async (options) => {
22
+ if (options.strict) {
23
+ const result = await runStrictDoctor({
24
+ maxExamples: options.verbose ? 25 : 5
25
+ });
26
+ if (options.json) {
27
+ console.log(JSON.stringify(result, null, 2));
28
+ }
29
+ else {
30
+ console.log("BriefOps Strict Doctor");
31
+ console.log("");
32
+ console.log(`OK: ${result.ok ? "yes" : "no"}`);
33
+ console.log(`Release ready: ${result.releaseReady ? "yes" : "no"}`);
34
+ console.log(`Checks: ${result.summary.checks} (${result.summary.ok} ok, ${result.summary.warn} warn, ${result.summary.fail} fail)`);
35
+ console.log("");
36
+ printTable([
37
+ ["Source", "Check", "Status", "Detail"],
38
+ ...result.checks.map((check) => [check.source, check.name, check.status, check.detail])
39
+ ]);
40
+ }
41
+ if (!result.releaseReady) {
42
+ process.exitCode = 1;
43
+ }
44
+ return;
45
+ }
19
46
  if (options.privacy) {
20
47
  if (options.fixGitignore) {
21
48
  const path = await fixBriefOpsGitignore();