briefops 2.0.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.
- package/CHANGELOG.md +16 -0
- package/README.md +40 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.js +27 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/harness.d.ts +2 -0
- package/dist/commands/harness.js +56 -0
- package/dist/commands/harness.js.map +1 -0
- package/dist/commands/memory.js +20 -3
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/obs.d.ts +2 -0
- package/dist/commands/obs.js +51 -0
- package/dist/commands/obs.js.map +1 -0
- package/dist/core/codexPlugin.js +40 -0
- package/dist/core/codexPlugin.js.map +1 -1
- package/dist/core/harness.d.ts +27 -0
- package/dist/core/harness.js +342 -0
- package/dist/core/harness.js.map +1 -0
- package/dist/core/lock.d.ts +1 -0
- package/dist/core/lock.js +18 -4
- package/dist/core/lock.js.map +1 -1
- package/dist/core/memory.d.ts +4 -1
- package/dist/core/memory.js +54 -2
- package/dist/core/memory.js.map +1 -1
- package/dist/core/memoryHygiene.d.ts +11 -0
- package/dist/core/memoryHygiene.js +93 -0
- package/dist/core/memoryHygiene.js.map +1 -1
- package/dist/core/memoryProposal.js +21 -8
- package/dist/core/memoryProposal.js.map +1 -1
- package/dist/core/observability.d.ts +36 -0
- package/dist/core/observability.js +70 -0
- package/dist/core/observability.js.map +1 -0
- package/dist/core/securityDoctor.js +3 -5
- package/dist/core/securityDoctor.js.map +1 -1
- package/dist/core/strictDoctor.d.ts +22 -0
- package/dist/core/strictDoctor.js +95 -0
- package/dist/core/strictDoctor.js.map +1 -0
- package/dist/schemas/memory.d.ts +100 -0
- package/dist/schemas/memory.js +9 -1
- package/dist/schemas/memory.js.map +1 -1
- package/dist/schemas/memoryProposal.d.ts +115 -0
- package/dist/schemas/memoryProposal.js +2 -1
- package/dist/schemas/memoryProposal.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/compatibility.md +7 -3
- package/docs/file-format.md +3 -1
- package/docs/impact-report.md +140 -0
- package/docs/integrations/harnesses.md +9 -0
- package/docs/master-harness.md +610 -0
- package/docs/privacy-model.md +2 -0
- package/docs/quickstart.md +17 -0
- package/docs/release-checklist.md +16 -2
- package/docs/roadmap.md +12 -5
- package/docs/token-budget.md +8 -0
- package/package.json +2 -2
- package/plugins/briefops-codex/.codex-plugin/plugin.json +2 -1
- package/plugins/briefops-codex/README.md +2 -0
- package/plugins/briefops-codex/skills/briefops-route-task/SKILL.md +33 -0
package/dist/schemas/memory.d.ts
CHANGED
|
@@ -2,6 +2,25 @@ import { z } from "zod";
|
|
|
2
2
|
export declare const memoryItemTypes: readonly ["fact", "decision", "lesson", "incident", "deprecated"];
|
|
3
3
|
export declare const memoryStatuses: readonly ["active", "stale", "deprecated", "superseded", "archived"];
|
|
4
4
|
export declare const memoryVisibilities: readonly ["private", "shared", "public"];
|
|
5
|
+
export declare const memoryEvidenceSchema: z.ZodObject<{
|
|
6
|
+
path: z.ZodString;
|
|
7
|
+
start_line: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
end_line: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
sha256: z.ZodOptional<z.ZodString>;
|
|
10
|
+
note: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
path: string;
|
|
13
|
+
start_line?: number | undefined;
|
|
14
|
+
end_line?: number | undefined;
|
|
15
|
+
sha256?: string | undefined;
|
|
16
|
+
note?: string | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
path: string;
|
|
19
|
+
start_line?: number | undefined;
|
|
20
|
+
end_line?: number | undefined;
|
|
21
|
+
sha256?: string | undefined;
|
|
22
|
+
note?: string | undefined;
|
|
23
|
+
}>;
|
|
5
24
|
export declare const memoryItemSchema: z.ZodObject<{
|
|
6
25
|
id: z.ZodString;
|
|
7
26
|
type: z.ZodEnum<["fact", "decision", "lesson", "incident", "deprecated"]>;
|
|
@@ -14,6 +33,25 @@ export declare const memoryItemSchema: z.ZodObject<{
|
|
|
14
33
|
tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
15
34
|
visibility: z.ZodDefault<z.ZodEnum<["private", "shared", "public"]>>;
|
|
16
35
|
exportable: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
+
evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
37
|
+
path: z.ZodString;
|
|
38
|
+
start_line: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
end_line: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
sha256: z.ZodOptional<z.ZodString>;
|
|
41
|
+
note: z.ZodOptional<z.ZodString>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
path: string;
|
|
44
|
+
start_line?: number | undefined;
|
|
45
|
+
end_line?: number | undefined;
|
|
46
|
+
sha256?: string | undefined;
|
|
47
|
+
note?: string | undefined;
|
|
48
|
+
}, {
|
|
49
|
+
path: string;
|
|
50
|
+
start_line?: number | undefined;
|
|
51
|
+
end_line?: number | undefined;
|
|
52
|
+
sha256?: string | undefined;
|
|
53
|
+
note?: string | undefined;
|
|
54
|
+
}>, "many">>;
|
|
17
55
|
}, "strip", z.ZodTypeAny, {
|
|
18
56
|
id: string;
|
|
19
57
|
created_at: string;
|
|
@@ -24,6 +62,13 @@ export declare const memoryItemSchema: z.ZodObject<{
|
|
|
24
62
|
tags: string[];
|
|
25
63
|
visibility: "private" | "shared" | "public";
|
|
26
64
|
exportable: boolean;
|
|
65
|
+
evidence: {
|
|
66
|
+
path: string;
|
|
67
|
+
start_line?: number | undefined;
|
|
68
|
+
end_line?: number | undefined;
|
|
69
|
+
sha256?: string | undefined;
|
|
70
|
+
note?: string | undefined;
|
|
71
|
+
}[];
|
|
27
72
|
project?: string | undefined;
|
|
28
73
|
skill?: string | undefined;
|
|
29
74
|
}, {
|
|
@@ -38,6 +83,13 @@ export declare const memoryItemSchema: z.ZodObject<{
|
|
|
38
83
|
tags?: string[] | undefined;
|
|
39
84
|
visibility?: "private" | "shared" | "public" | undefined;
|
|
40
85
|
exportable?: boolean | undefined;
|
|
86
|
+
evidence?: {
|
|
87
|
+
path: string;
|
|
88
|
+
start_line?: number | undefined;
|
|
89
|
+
end_line?: number | undefined;
|
|
90
|
+
sha256?: string | undefined;
|
|
91
|
+
note?: string | undefined;
|
|
92
|
+
}[] | undefined;
|
|
41
93
|
}>;
|
|
42
94
|
export declare const memoryFileSchema: z.ZodObject<{
|
|
43
95
|
items: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
@@ -52,6 +104,25 @@ export declare const memoryFileSchema: z.ZodObject<{
|
|
|
52
104
|
tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
53
105
|
visibility: z.ZodDefault<z.ZodEnum<["private", "shared", "public"]>>;
|
|
54
106
|
exportable: z.ZodDefault<z.ZodBoolean>;
|
|
107
|
+
evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
108
|
+
path: z.ZodString;
|
|
109
|
+
start_line: z.ZodOptional<z.ZodNumber>;
|
|
110
|
+
end_line: z.ZodOptional<z.ZodNumber>;
|
|
111
|
+
sha256: z.ZodOptional<z.ZodString>;
|
|
112
|
+
note: z.ZodOptional<z.ZodString>;
|
|
113
|
+
}, "strip", z.ZodTypeAny, {
|
|
114
|
+
path: string;
|
|
115
|
+
start_line?: number | undefined;
|
|
116
|
+
end_line?: number | undefined;
|
|
117
|
+
sha256?: string | undefined;
|
|
118
|
+
note?: string | undefined;
|
|
119
|
+
}, {
|
|
120
|
+
path: string;
|
|
121
|
+
start_line?: number | undefined;
|
|
122
|
+
end_line?: number | undefined;
|
|
123
|
+
sha256?: string | undefined;
|
|
124
|
+
note?: string | undefined;
|
|
125
|
+
}>, "many">>;
|
|
55
126
|
}, "strip", z.ZodTypeAny, {
|
|
56
127
|
id: string;
|
|
57
128
|
created_at: string;
|
|
@@ -62,6 +133,13 @@ export declare const memoryFileSchema: z.ZodObject<{
|
|
|
62
133
|
tags: string[];
|
|
63
134
|
visibility: "private" | "shared" | "public";
|
|
64
135
|
exportable: boolean;
|
|
136
|
+
evidence: {
|
|
137
|
+
path: string;
|
|
138
|
+
start_line?: number | undefined;
|
|
139
|
+
end_line?: number | undefined;
|
|
140
|
+
sha256?: string | undefined;
|
|
141
|
+
note?: string | undefined;
|
|
142
|
+
}[];
|
|
65
143
|
project?: string | undefined;
|
|
66
144
|
skill?: string | undefined;
|
|
67
145
|
}, {
|
|
@@ -76,6 +154,13 @@ export declare const memoryFileSchema: z.ZodObject<{
|
|
|
76
154
|
tags?: string[] | undefined;
|
|
77
155
|
visibility?: "private" | "shared" | "public" | undefined;
|
|
78
156
|
exportable?: boolean | undefined;
|
|
157
|
+
evidence?: {
|
|
158
|
+
path: string;
|
|
159
|
+
start_line?: number | undefined;
|
|
160
|
+
end_line?: number | undefined;
|
|
161
|
+
sha256?: string | undefined;
|
|
162
|
+
note?: string | undefined;
|
|
163
|
+
}[] | undefined;
|
|
79
164
|
}>, "many">>;
|
|
80
165
|
}, "strip", z.ZodTypeAny, {
|
|
81
166
|
items: {
|
|
@@ -88,6 +173,13 @@ export declare const memoryFileSchema: z.ZodObject<{
|
|
|
88
173
|
tags: string[];
|
|
89
174
|
visibility: "private" | "shared" | "public";
|
|
90
175
|
exportable: boolean;
|
|
176
|
+
evidence: {
|
|
177
|
+
path: string;
|
|
178
|
+
start_line?: number | undefined;
|
|
179
|
+
end_line?: number | undefined;
|
|
180
|
+
sha256?: string | undefined;
|
|
181
|
+
note?: string | undefined;
|
|
182
|
+
}[];
|
|
91
183
|
project?: string | undefined;
|
|
92
184
|
skill?: string | undefined;
|
|
93
185
|
}[];
|
|
@@ -104,9 +196,17 @@ export declare const memoryFileSchema: z.ZodObject<{
|
|
|
104
196
|
tags?: string[] | undefined;
|
|
105
197
|
visibility?: "private" | "shared" | "public" | undefined;
|
|
106
198
|
exportable?: boolean | undefined;
|
|
199
|
+
evidence?: {
|
|
200
|
+
path: string;
|
|
201
|
+
start_line?: number | undefined;
|
|
202
|
+
end_line?: number | undefined;
|
|
203
|
+
sha256?: string | undefined;
|
|
204
|
+
note?: string | undefined;
|
|
205
|
+
}[] | undefined;
|
|
107
206
|
}[] | undefined;
|
|
108
207
|
}>;
|
|
109
208
|
export type MemoryItem = z.infer<typeof memoryItemSchema>;
|
|
209
|
+
export type MemoryEvidence = z.infer<typeof memoryEvidenceSchema>;
|
|
110
210
|
export type MemoryStatus = (typeof memoryStatuses)[number];
|
|
111
211
|
export type MemoryVisibility = (typeof memoryVisibilities)[number];
|
|
112
212
|
export type MemoryFile = z.infer<typeof memoryFileSchema>;
|
package/dist/schemas/memory.js
CHANGED
|
@@ -2,6 +2,13 @@ import { z } from "zod";
|
|
|
2
2
|
export const memoryItemTypes = ["fact", "decision", "lesson", "incident", "deprecated"];
|
|
3
3
|
export const memoryStatuses = ["active", "stale", "deprecated", "superseded", "archived"];
|
|
4
4
|
export const memoryVisibilities = ["private", "shared", "public"];
|
|
5
|
+
export const memoryEvidenceSchema = z.object({
|
|
6
|
+
path: z.string().min(1),
|
|
7
|
+
start_line: z.number().int().positive().optional(),
|
|
8
|
+
end_line: z.number().int().positive().optional(),
|
|
9
|
+
sha256: z.string().min(6).optional(),
|
|
10
|
+
note: z.string().optional()
|
|
11
|
+
});
|
|
5
12
|
export const memoryItemSchema = z.object({
|
|
6
13
|
id: z.string().min(1),
|
|
7
14
|
type: z.enum(memoryItemTypes),
|
|
@@ -13,7 +20,8 @@ export const memoryItemSchema = z.object({
|
|
|
13
20
|
created_at: z.string().datetime(),
|
|
14
21
|
tags: z.array(z.string()).default([]),
|
|
15
22
|
visibility: z.enum(memoryVisibilities).default("private"),
|
|
16
|
-
exportable: z.boolean().default(false)
|
|
23
|
+
exportable: z.boolean().default(false),
|
|
24
|
+
evidence: z.array(memoryEvidenceSchema).default([])
|
|
17
25
|
});
|
|
18
26
|
export const memoryFileSchema = z.object({
|
|
19
27
|
items: z.array(memoryItemSchema).default([])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/schemas/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AACjG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAE3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/schemas/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AACjG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAE3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC"}
|
|
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"memoryProposal.js","sourceRoot":"","sources":["../../src/schemas/memoryProposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAEnF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;IAC7C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAClC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvB,GAAG,KAAK;IACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAK;QAC3B,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,YAAY;KACf,CAAC,KAAK,CAAC,IAAI,CAAC;CACxB,CAAC,CAAC,CAAC;AAEJ,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;IACzD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,EAAE,uBAAuB,CAAC,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const briefopsVersion = "2.
|
|
1
|
+
export declare const briefopsVersion = "2.1.1";
|
package/dist/version.js
CHANGED
package/docs/compatibility.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# BriefOps 2.
|
|
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 2.
|
|
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`.
|
|
@@ -10,6 +10,10 @@ BriefOps follows semantic versioning for the public CLI and local file formats.
|
|
|
10
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
|
|
|
@@ -35,7 +39,7 @@ Breaking changes require a new major version. Examples:
|
|
|
35
39
|
|
|
36
40
|
New 1.0 workspaces write `version: 1.0.0` in `.briefops/config.yaml`.
|
|
37
41
|
|
|
38
|
-
BriefOps 2.
|
|
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
|
|
package/docs/file-format.md
CHANGED
|
@@ -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`.
|
|
@@ -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.
|
|
@@ -44,6 +44,15 @@ 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.
|