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
@@ -9,6 +9,25 @@ export declare const memoryProposalEntrySchema: z.ZodEffects<z.ZodObject<{
9
9
  tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
10
10
  visibility: z.ZodDefault<z.ZodEnum<["private", "shared", "public"]>>;
11
11
  exportable: z.ZodDefault<z.ZodBoolean>;
12
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
13
+ path: z.ZodString;
14
+ start_line: z.ZodOptional<z.ZodNumber>;
15
+ end_line: z.ZodOptional<z.ZodNumber>;
16
+ sha256: z.ZodOptional<z.ZodString>;
17
+ note: z.ZodOptional<z.ZodString>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ path: string;
20
+ start_line?: number | undefined;
21
+ end_line?: number | undefined;
22
+ sha256?: string | undefined;
23
+ note?: string | undefined;
24
+ }, {
25
+ path: string;
26
+ start_line?: number | undefined;
27
+ end_line?: number | undefined;
28
+ sha256?: string | undefined;
29
+ note?: string | undefined;
30
+ }>, "many">>;
12
31
  rationale: z.ZodDefault<z.ZodString>;
13
32
  }, "strip", z.ZodTypeAny, {
14
33
  type: "deprecated" | "fact" | "decision" | "lesson" | "incident";
@@ -17,6 +36,13 @@ export declare const memoryProposalEntrySchema: z.ZodEffects<z.ZodObject<{
17
36
  tags: string[];
18
37
  visibility: "private" | "shared" | "public";
19
38
  exportable: boolean;
39
+ evidence: {
40
+ path: string;
41
+ start_line?: number | undefined;
42
+ end_line?: number | undefined;
43
+ sha256?: string | undefined;
44
+ note?: string | undefined;
45
+ }[];
20
46
  rationale: string;
21
47
  source?: string | undefined;
22
48
  category?: "facts" | "decisions" | "lessons" | "incidents" | "deprecated" | undefined;
@@ -28,6 +54,13 @@ export declare const memoryProposalEntrySchema: z.ZodEffects<z.ZodObject<{
28
54
  tags?: string[] | undefined;
29
55
  visibility?: "private" | "shared" | "public" | undefined;
30
56
  exportable?: boolean | undefined;
57
+ evidence?: {
58
+ path: string;
59
+ start_line?: number | undefined;
60
+ end_line?: number | undefined;
61
+ sha256?: string | undefined;
62
+ note?: string | undefined;
63
+ }[] | undefined;
31
64
  category?: "facts" | "decisions" | "lessons" | "incidents" | "deprecated" | undefined;
32
65
  rationale?: string | undefined;
33
66
  }>, {
@@ -38,6 +71,13 @@ export declare const memoryProposalEntrySchema: z.ZodEffects<z.ZodObject<{
38
71
  tags: string[];
39
72
  visibility: "private" | "shared" | "public";
40
73
  exportable: boolean;
74
+ evidence: {
75
+ path: string;
76
+ start_line?: number | undefined;
77
+ end_line?: number | undefined;
78
+ sha256?: string | undefined;
79
+ note?: string | undefined;
80
+ }[];
41
81
  rationale: string;
42
82
  source?: string | undefined;
43
83
  }, {
@@ -48,6 +88,13 @@ export declare const memoryProposalEntrySchema: z.ZodEffects<z.ZodObject<{
48
88
  tags?: string[] | undefined;
49
89
  visibility?: "private" | "shared" | "public" | undefined;
50
90
  exportable?: boolean | undefined;
91
+ evidence?: {
92
+ path: string;
93
+ start_line?: number | undefined;
94
+ end_line?: number | undefined;
95
+ sha256?: string | undefined;
96
+ note?: string | undefined;
97
+ }[] | undefined;
51
98
  category?: "facts" | "decisions" | "lessons" | "incidents" | "deprecated" | undefined;
52
99
  rationale?: string | undefined;
53
100
  }>;
@@ -68,6 +115,25 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
68
115
  tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
69
116
  visibility: z.ZodDefault<z.ZodEnum<["private", "shared", "public"]>>;
70
117
  exportable: z.ZodDefault<z.ZodBoolean>;
118
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
119
+ path: z.ZodString;
120
+ start_line: z.ZodOptional<z.ZodNumber>;
121
+ end_line: z.ZodOptional<z.ZodNumber>;
122
+ sha256: z.ZodOptional<z.ZodString>;
123
+ note: z.ZodOptional<z.ZodString>;
124
+ }, "strip", z.ZodTypeAny, {
125
+ path: string;
126
+ start_line?: number | undefined;
127
+ end_line?: number | undefined;
128
+ sha256?: string | undefined;
129
+ note?: string | undefined;
130
+ }, {
131
+ path: string;
132
+ start_line?: number | undefined;
133
+ end_line?: number | undefined;
134
+ sha256?: string | undefined;
135
+ note?: string | undefined;
136
+ }>, "many">>;
71
137
  rationale: z.ZodDefault<z.ZodString>;
72
138
  }, "strip", z.ZodTypeAny, {
73
139
  type: "deprecated" | "fact" | "decision" | "lesson" | "incident";
@@ -76,6 +142,13 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
76
142
  tags: string[];
77
143
  visibility: "private" | "shared" | "public";
78
144
  exportable: boolean;
145
+ evidence: {
146
+ path: string;
147
+ start_line?: number | undefined;
148
+ end_line?: number | undefined;
149
+ sha256?: string | undefined;
150
+ note?: string | undefined;
151
+ }[];
79
152
  rationale: string;
80
153
  source?: string | undefined;
81
154
  category?: "facts" | "decisions" | "lessons" | "incidents" | "deprecated" | undefined;
@@ -87,6 +160,13 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
87
160
  tags?: string[] | undefined;
88
161
  visibility?: "private" | "shared" | "public" | undefined;
89
162
  exportable?: boolean | undefined;
163
+ evidence?: {
164
+ path: string;
165
+ start_line?: number | undefined;
166
+ end_line?: number | undefined;
167
+ sha256?: string | undefined;
168
+ note?: string | undefined;
169
+ }[] | undefined;
90
170
  category?: "facts" | "decisions" | "lessons" | "incidents" | "deprecated" | undefined;
91
171
  rationale?: string | undefined;
92
172
  }>, {
@@ -97,6 +177,13 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
97
177
  tags: string[];
98
178
  visibility: "private" | "shared" | "public";
99
179
  exportable: boolean;
180
+ evidence: {
181
+ path: string;
182
+ start_line?: number | undefined;
183
+ end_line?: number | undefined;
184
+ sha256?: string | undefined;
185
+ note?: string | undefined;
186
+ }[];
100
187
  rationale: string;
101
188
  source?: string | undefined;
102
189
  }, {
@@ -107,6 +194,13 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
107
194
  tags?: string[] | undefined;
108
195
  visibility?: "private" | "shared" | "public" | undefined;
109
196
  exportable?: boolean | undefined;
197
+ evidence?: {
198
+ path: string;
199
+ start_line?: number | undefined;
200
+ end_line?: number | undefined;
201
+ sha256?: string | undefined;
202
+ note?: string | undefined;
203
+ }[] | undefined;
110
204
  category?: "facts" | "decisions" | "lessons" | "incidents" | "deprecated" | undefined;
111
205
  rationale?: string | undefined;
112
206
  }>, "many">>;
@@ -124,6 +218,13 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
124
218
  tags: string[];
125
219
  visibility: "private" | "shared" | "public";
126
220
  exportable: boolean;
221
+ evidence: {
222
+ path: string;
223
+ start_line?: number | undefined;
224
+ end_line?: number | undefined;
225
+ sha256?: string | undefined;
226
+ note?: string | undefined;
227
+ }[];
127
228
  rationale: string;
128
229
  source?: string | undefined;
129
230
  }[];
@@ -149,6 +250,13 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
149
250
  tags?: string[] | undefined;
150
251
  visibility?: "private" | "shared" | "public" | undefined;
151
252
  exportable?: boolean | undefined;
253
+ evidence?: {
254
+ path: string;
255
+ start_line?: number | undefined;
256
+ end_line?: number | undefined;
257
+ sha256?: string | undefined;
258
+ note?: string | undefined;
259
+ }[] | undefined;
152
260
  category?: "facts" | "decisions" | "lessons" | "incidents" | "deprecated" | undefined;
153
261
  rationale?: string | undefined;
154
262
  }[] | undefined;
@@ -166,6 +274,13 @@ export declare const memoryProposalSchema: z.ZodEffects<z.ZodObject<{
166
274
  tags: string[];
167
275
  visibility: "private" | "shared" | "public";
168
276
  exportable: boolean;
277
+ evidence: {
278
+ path: string;
279
+ start_line?: number | undefined;
280
+ end_line?: number | undefined;
281
+ sha256?: string | undefined;
282
+ note?: string | undefined;
283
+ }[];
169
284
  rationale: string;
170
285
  source?: string | undefined;
171
286
  }[];
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { memoryCategories } from "../core/paths.js";
3
- import { memoryItemTypes, memoryStatuses, memoryVisibilities } from "./memory.js";
3
+ import { memoryEvidenceSchema, memoryItemTypes, memoryStatuses, memoryVisibilities } from "./memory.js";
4
4
  export const memoryProposalStatuses = ["proposed", "applied", "rejected"];
5
5
  export const memoryProposalEntrySchema = z.object({
6
6
  category: z.enum(memoryCategories).optional(),
@@ -11,6 +11,7 @@ export const memoryProposalEntrySchema = z.object({
11
11
  tags: z.array(z.string()).default([]),
12
12
  visibility: z.enum(memoryVisibilities).default("private"),
13
13
  exportable: z.boolean().default(false),
14
+ evidence: z.array(memoryEvidenceSchema).default([]),
14
15
  rationale: z.string().default("")
15
16
  }).transform((entry) => ({
16
17
  ...entry,
@@ -1 +1 @@
1
- {"version":3,"file":"memoryProposal.js","sourceRoot":"","sources":["../../src/schemas/memoryProposal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memoryProposal.js","sourceRoot":"","sources":["../../src/schemas/memoryProposal.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const briefopsVersion = "1.1.0";
1
+ export declare const briefopsVersion = "2.1.1";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Keep this version in sync with package.json.
2
- export const briefopsVersion = "1.1.0";
2
+ export const briefopsVersion = "2.1.1";
3
3
  //# sourceMappingURL=version.js.map
@@ -12,4 +12,4 @@ Shared-only resume output includes selected shared/exportable memory and omits p
12
12
 
13
13
  The generated prompt includes continuity rules, evidence gates, a completion signal, and after-completion logging instructions.
14
14
 
15
- Local-private resume output can include recent work-log lessons and decisions before they are promoted to durable memory. This keeps fresh-thread handoff usable while memory proposals remain pending for human review.
15
+ Local-private resume output can include recent work-log lessons and decisions as immediate continuity. `briefops finish` promotes durable memory locally by default; older or review-mode pending proposals do not block fresh-thread handoff.
@@ -1,15 +1,19 @@
1
- # BriefOps 1.0 Compatibility Policy
1
+ # BriefOps 2.1.1 Compatibility Policy
2
2
 
3
3
  BriefOps follows semantic versioning for the public CLI and local file formats.
4
4
 
5
- ## Stable In 1.0
5
+ ## Stable In 2.1.x
6
6
 
7
7
  - Public commands documented in `README.md`.
8
8
  - `.briefops/` source file formats documented in `docs/file-format.md`.
9
9
  - `shared-only` and `local-private` export policy names.
10
- - Human-approved memory proposal and skill patch flow.
10
+ - Directory-local memory promotion from `finish`, plus reviewable memory proposal and skill patch flows.
11
11
  - Workspace lock behavior for local write operations.
12
12
  - Harness router export targets: `agents-md`, `claude-md`, `cursor-rules`, and `all`.
13
+ - Master Harness routing commands: `briefops harness route` and `briefops harness matrix`.
14
+ - Read-only continuity observability through `briefops obs continuity`.
15
+ - Strict local release-readiness aggregation through `briefops doctor --strict`.
16
+ - Optional memory evidence anchors with safe defaults for older memory files.
13
17
 
14
18
  ## Compatible Changes
15
19
 
@@ -28,14 +32,14 @@ Breaking changes require a new major version. Examples:
28
32
  - Removing or renaming stable CLI commands or flags.
29
33
  - Changing required fields in documented `.briefops/` source formats.
30
34
  - Changing `shared-only` so it includes private local content or private metadata counts.
31
- - Auto-applying memory proposals or skill patches.
35
+ - Auto-applying skill patches or exporting private memory outside the workspace.
32
36
  - Requiring a hosted service, network dependency, agent runtime, MCP server, vector database, or cloud sync.
33
37
 
34
38
  ## Workspace Version Support
35
39
 
36
40
  New 1.0 workspaces write `version: 1.0.0` in `.briefops/config.yaml`.
37
41
 
38
- BriefOps 1.0 can read legacy `0.x` workspace configs on a best-effort compatibility basis. Future `2.x` workspace configs fail with an explicit upgrade error instead of silently reading incompatible data.
42
+ BriefOps 2.1.1 keeps the workspace schema at `1.0.0` and can read legacy `0.x` workspace configs on a best-effort compatibility basis. Future unsupported workspace schema major versions fail with an explicit upgrade error instead of silently reading incompatible data.
39
43
 
40
44
  ## Migration Policy
41
45
 
@@ -45,5 +49,5 @@ If a future release needs a migration, it must provide:
45
49
 
46
50
  - a documented command or manual procedure,
47
51
  - dry-run or inspection guidance,
48
- - no automatic approval of memory or skill patches,
52
+ - no automatic skill patch application,
49
53
  - tests covering old fixtures.
package/docs/concept.md CHANGED
@@ -7,7 +7,7 @@ It does not run Codex, Claude Code, or other agents. It prepares compact continu
7
7
  The core loop is:
8
8
 
9
9
  ```text
10
- brief -> work -> log -> proposal -> approved memory -> worker summary -> handoff/resume
10
+ brief -> work -> log -> proposal audit -> local memory -> worker summary -> handoff/resume
11
11
  ```
12
12
 
13
- Raw logs remain audit records and immediate handoff input. Memory is curated operational knowledge that requires human approval.
13
+ Raw logs remain audit records and immediate handoff input. Memory is curated operational knowledge stored inside the current repository's `.briefops/` directory.
@@ -32,7 +32,8 @@ BriefOps stores all user data under `.briefops/`. Version 1.0 treats these files
32
32
 
33
33
  - `.briefops/memory/<category>.yaml`
34
34
  - Shape: `items: MemoryItem[]`.
35
- - Stable item fields: `id`, `type`, `status`, `project`, `skill`, `content`, `source`, `created_at`, `tags`, `visibility`, `exportable`.
35
+ - Stable item fields: `id`, `type`, `status`, `project`, `skill`, `content`, `source`, `created_at`, `tags`, `visibility`, `exportable`, `evidence`.
36
+ - `evidence` is an optional array of path anchors with stable fields: `path`, `start_line`, `end_line`, `sha256`, `note`.
36
37
  - Supported statuses: `active`, `stale`, `deprecated`, `superseded`, `archived`.
37
38
  - Supported visibility values: `private`, `shared`, `public`.
38
39
 
@@ -46,6 +47,7 @@ BriefOps stores all user data under `.briefops/`. Version 1.0 treats these files
46
47
  - Stable fields: `id`, `created_at`, `from_log`, `status`, `project`, `skill`, `worker`, `items`, `applied_at`, `rejected_at`.
47
48
  - Legacy `proposals` arrays remain readable and are normalized to `items`.
48
49
  - Proposal entries use memory item fields plus `category` and `rationale`.
50
+ - Proposal entries may carry `evidence` anchors copied from changed-file paths in the source work log.
49
51
 
50
52
  - `.briefops/patches/*.patch.yaml`
51
53
  - Stable fields: `id`, `created_at`, `skill`, `from_log`, `status`, `target_section`, `lessons`, `additions`, `applied_at`, `rejected_at`.
@@ -8,4 +8,4 @@ briefops handoff generate --worker quant-reviewer --task "Continue rebalance rev
8
8
 
9
9
  A handoff includes project context, worker summary, recent work, active decisions, lessons, incidents, deprecated notes when relevant, a recommended start, after-completion commands, and token accounting.
10
10
 
11
- Recent work is immediate continuity, not durable memory approval. Local handoffs include work-log results, lessons, decisions, open risks, incidents, and next steps even when the related memory proposal is still pending. Shared-only handoffs continue to omit raw work logs and private continuity details.
11
+ Recent work is immediate continuity. Local handoffs include work-log results, lessons, decisions, open risks, incidents, and next steps even when an older or review-mode memory proposal is still pending. Shared-only handoffs continue to omit raw work logs and private continuity details.
@@ -0,0 +1,140 @@
1
+ # BriefOps Impact Report v0
2
+
3
+ Use this template to record whether BriefOps impact is measured, estimated, or
4
+ unmeasured for one project task or reporting period. Keep the field names stable.
5
+
6
+ ## Report Values
7
+
8
+ project:
9
+ task_or_period:
10
+ briefops_adoption_point:
11
+ token_usage_status: unmeasured
12
+ input_tokens:
13
+ output_tokens:
14
+ total_tokens:
15
+ context_baseline:
16
+ context_used:
17
+ context_reduction_estimate:
18
+ artifact_coverage:
19
+ handoff_status:
20
+ validation_status:
21
+ conclusion: unmeasured
22
+
23
+ ## Field Definitions
24
+
25
+ `project`: Project, repository, workspace, or product area being reported.
26
+
27
+ `task_or_period`: The task, milestone, sprint, date range, or release covered by
28
+ this report. Use one report per task or period.
29
+
30
+ `briefops_adoption_point`: Where BriefOps entered the workflow, such as before
31
+ planning, before implementation, during handoff, or after validation.
32
+
33
+ `token_usage_status`: Evidence level for token usage values. Allowed values:
34
+ `measured`, `estimated`, `unmeasured`.
35
+
36
+ `input_tokens`: Input token count for the covered task or period. Leave blank or
37
+ write `unmeasured` when no credible value exists.
38
+
39
+ `output_tokens`: Output token count for the covered task or period. Leave blank
40
+ or write `unmeasured` when no credible value exists.
41
+
42
+ `total_tokens`: Input plus output tokens for the covered task or period. Leave
43
+ blank or write `unmeasured` when no credible value exists.
44
+
45
+ `context_baseline`: The size of the context that would otherwise have been used,
46
+ limited to the whole repo, whole document set, full history dump, or other
47
+ bounded source context. Include the unit used.
48
+
49
+ `context_used`: The size of the actual BriefOps brief, spec, context pack, or
50
+ other bounded context supplied to the agent. Use the same unit as
51
+ `context_baseline`.
52
+
53
+ `context_reduction_estimate`: Estimated context reduction, calculated only from
54
+ `context_baseline` and `context_used`.
55
+
56
+ `artifact_coverage`: Existence-only coverage for these eight artifacts:
57
+ `brief`, `spec`, `plan`, `tasks`, `validation`, `review`, `handoff`,
58
+ `decision-log`. Record as `<present_count>/8` plus present and missing names.
59
+
60
+ `handoff_status`: Handoff readiness for the covered task or period. Suggested
61
+ values: `complete`, `partial`, `absent`, `not_applicable`.
62
+
63
+ `validation_status`: Validation evidence for the covered task or period.
64
+ Suggested values: `validated`, `partial`, `unvalidated`, `blocked`,
65
+ `not_applicable`.
66
+
67
+ `conclusion`: Overall evidence conclusion. Allowed values only: `proven`,
68
+ `partially supported`, `unmeasured`, `not supported`.
69
+
70
+ ## Measurement Rules
71
+
72
+ ### Token Usage And Token Savings
73
+
74
+ - Mark `token_usage_status` as `measured` only when actual token usage logs exist
75
+ for the covered task or period.
76
+ - Mark `token_usage_status` as `estimated` only when token counts are derived
77
+ from a deterministic approximation, such as a tokenizer or transcript count.
78
+ - Mark `token_usage_status` as `unmeasured` when neither actual logs nor a
79
+ deterministic approximation are available.
80
+ - If actual token usage logs do not exist, token savings must be reported as
81
+ `unmeasured`.
82
+ - Do not use `context_reduction_estimate` as evidence of token savings.
83
+ - Do not combine input, output, and total tokens from different tasks, agents, or
84
+ reporting periods.
85
+
86
+ ### Context Management
87
+
88
+ - Treat context management as separate from token savings.
89
+ - Estimate context reduction only by comparing `context_baseline` with
90
+ `context_used`.
91
+ - Use the same unit for `context_baseline` and `context_used`, preferably tokens.
92
+ Bytes, lines, files, or pages are acceptable only when both values use the same
93
+ unit.
94
+ - Calculate:
95
+ `(context_baseline - context_used) / context_baseline`.
96
+ - Mark `context_reduction_estimate` as `unmeasured` when either side of the
97
+ comparison is unavailable or uses incompatible units.
98
+ - A context reduction estimate supports a context management claim only. It does
99
+ not prove token savings or quality improvement.
100
+
101
+ ### Artifact Coverage
102
+
103
+ - Calculate `artifact_coverage` only from whether each named artifact exists.
104
+ - Do not score artifact quality, length, freshness, or correctness in
105
+ `artifact_coverage`.
106
+ - Count an artifact as present only when it is discoverable in the project files
107
+ or attached work record for the covered task or period.
108
+ - If an artifact has multiple files, count the artifact type once.
109
+
110
+ ### Conclusion
111
+
112
+ - Use `proven` only when the claimed impact is backed by direct measured
113
+ evidence. Token savings can be `proven` only with actual token usage logs.
114
+ - Use `partially supported` when measured evidence is incomplete, but deterministic
115
+ context comparison, artifact coverage, handoff status, or validation status
116
+ supports a narrower BriefOps benefit.
117
+ - Use `unmeasured` when the report records adoption but lacks enough evidence to
118
+ support or reject impact.
119
+ - Use `not supported` when the available evidence contradicts the claimed impact
120
+ or shows no meaningful BriefOps effect.
121
+ - If token savings are unmeasured but context management is estimated, the
122
+ conclusion must not imply proven token savings.
123
+
124
+ ## 30-Minute Fill Procedure
125
+
126
+ 1. Identify the project and covered task or period.
127
+ 2. Check whether actual token usage logs exist.
128
+ 3. Fill token fields as measured, estimated, or unmeasured.
129
+ 4. Compare only the bounded baseline context with the actual BriefOps context
130
+ used.
131
+ 5. Count the eight artifact types by existence only.
132
+ 6. Record handoff and validation status from available work records.
133
+ 7. Choose exactly one allowed conclusion without merging token savings and
134
+ context management evidence.
135
+
136
+ ## Non-Goals
137
+
138
+ This template does not define automatic collection, JSON schema, dashboards,
139
+ cross-project comparison, migration guidance, sample reports, scoring, or a full
140
+ Spec Kit workflow.
@@ -16,10 +16,10 @@ After meaningful work:
16
16
 
17
17
  ```bash
18
18
  briefops finish --worker <worker> --task "<task>" --result "<result>"
19
- briefops memory proposal-show latest
20
- briefops approve latest
21
19
  ```
22
20
 
21
+ `finish` applies durable directory-local memory by default. Use `--memory-review` only when a pending local queue is desired.
22
+
23
23
  For a fresh thread:
24
24
 
25
25
  ```bash
@@ -44,20 +44,28 @@ briefops export all
44
44
 
45
45
  These files should stay compact. They teach harnesses how to call BriefOps and do not copy private memory, raw logs, handoffs, or worker summaries.
46
46
 
47
+ For local readiness and context compression checks:
48
+
49
+ ```bash
50
+ briefops doctor --strict --json
51
+ briefops obs continuity --worker <worker> --task "<task>" --json
52
+ ```
53
+
54
+ These commands are core CLI checks. They do not install MCP servers or hooks.
55
+
47
56
  ## LazyCodex / OmO
48
57
 
49
58
  Use LazyCodex or OmO for orchestration, hooks, LSP/MCP, and autonomous execution. Use BriefOps for durable local continuity.
50
59
 
51
- Suggested human workflow:
60
+ Suggested local workflow:
52
61
 
53
62
  ```bash
54
63
  briefops prime --task "Implement the next scoped change." --format codex --max-tokens 800
55
64
  codex "Use the BriefOps prime context, then run ultrawork for this task."
56
65
  briefops finish --worker <worker> --task "Implement the next scoped change." --result "<verified result>"
57
- briefops memory proposal-show latest
58
66
  ```
59
67
 
60
- Do not let a harness auto-run `briefops approve latest`. Approval should remain human-confirmed.
68
+ Do not let a harness export private `.briefops/` memory or apply skill patches without explicit direction.
61
69
 
62
70
  ## Codex App And Codex CLI
63
71
 
@@ -67,7 +75,7 @@ This command does not write to global Codex folders by default.
67
75
 
68
76
  ## Claude Code
69
77
 
70
- BriefOps can coexist with `CLAUDE.md`. Keep `CLAUDE.md` for always-loaded project instructions and use BriefOps for task history, approved memory, handoffs, and shared-only packs.
78
+ BriefOps can coexist with `CLAUDE.md`. Keep `CLAUDE.md` for always-loaded project instructions and use BriefOps for task history, local memory, handoffs, and shared-only packs.
71
79
 
72
80
  ## Cursor
73
81