pluribus-context 0.3.29 → 0.3.31
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/docs/context-budget-receipts.md +23 -0
- package/docs/context-input-evidence.md +14 -0
- package/examples/agent-skills/context-receipts/README.md +4 -3
- package/examples/agent-skills/context-receipts/SKILL.md +21 -2
- package/examples/context-input-evidence/convert-pruning-log.mjs +275 -0
- package/examples/context-input-evidence/pruning-otel-trace.json +885 -0
- package/examples/context-input-evidence/pruning-receipt.ndjson +7 -0
- package/examples/context-input-evidence/sample-pruning-log.jsonl +8 -0
- package/package.json +1 -1
- package/src/utils/version.js +1 -1
|
@@ -43,6 +43,29 @@ A useful receipt starts small:
|
|
|
43
43
|
|
|
44
44
|
Keep exact counts when they are not sensitive. Bucket token counts and sizes when exact values could reveal private workload shape.
|
|
45
45
|
|
|
46
|
+
## Post-hoc pruning / context cleaning
|
|
47
|
+
|
|
48
|
+
Context-cleaning tools can reduce a bloated session after context has already entered the transcript. That creates a separate proof boundary from lazy loading: what was pruned, minified, stubbed, deduped, protected, and backed up?
|
|
49
|
+
|
|
50
|
+
The receipt should prove:
|
|
51
|
+
|
|
52
|
+
- prescription/mode/trigger without raw session JSONL;
|
|
53
|
+
- before/after token and byte buckets;
|
|
54
|
+
- per-strategy candidate, changed, removed, and protected buckets;
|
|
55
|
+
- compact summaries, behavioral digests, active task state, and other protected items were not removed;
|
|
56
|
+
- a backup was created/verified for executed runs; and
|
|
57
|
+
- raw tool output, file contents, session text, emails, secrets, paths, and customer data stayed out of the receipt.
|
|
58
|
+
|
|
59
|
+
Runnable fixture:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
node examples/context-input-evidence/convert-pruning-log.mjs
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Public trace:
|
|
66
|
+
|
|
67
|
+
- `examples/context-input-evidence/pruning-otel-trace.json`
|
|
68
|
+
|
|
46
69
|
## Subagent boot budget
|
|
47
70
|
|
|
48
71
|
Subagents can fail before task #1 if they inherit every MCP schema, skill listing, rule, or memory index from the parent. The receipt should separate:
|
|
@@ -330,6 +330,20 @@ It reads `sample-compaction-log.jsonl` and writes `compaction-receipt.ndjson` pl
|
|
|
330
330
|
|
|
331
331
|
This is for reliability/auditability work where users need to know whether the original engineering objective survived compaction. The receipt should prove the compaction boundary and item decisions without exposing raw prompts, private instructions, tool outputs, memory bodies, summaries, customer data, or transcripts.
|
|
332
332
|
|
|
333
|
+
To test post-hoc pruning / context-cleaning receipts — where a Claude Code-style session cleaner trims, minifies, stubs, or dedupes context after it entered the transcript — run:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
node examples/context-input-evidence/convert-pruning-log.mjs
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
It reads `sample-pruning-log.jsonl` and writes `pruning-receipt.ndjson` plus `pruning-otel-trace.json`. The sample emits three event types:
|
|
340
|
+
|
|
341
|
+
- `context.prune.started` — prescription, mode, trigger, before token/byte buckets, backup identity hash, plan hash, and privacy flags.
|
|
342
|
+
- `context.prune.strategy.evaluated` — each pruning strategy, action (`trimmed`, `minified`, `deduped`, or `protected`), candidate/changed/protected buckets, removed token/byte buckets, reason hash, and sample hash.
|
|
343
|
+
- `context.prune.completed` — after token/byte buckets, changed/protected item buckets, backup verification, summary hash, and the audit gap.
|
|
344
|
+
|
|
345
|
+
This is for tools that promise to clean bloated sessions while preserving active task state. The receipt should prove what was pruned and what was protected without exporting raw session JSONL, tool outputs, file contents, paths, secrets, emails, screenshots, customer data, or summaries.
|
|
346
|
+
|
|
333
347
|
To test incremental memory consolidation — where a shared-memory server runs a hook-safe pass after a session and turns several recent memories into one consolidated memory with lineage — run:
|
|
334
348
|
|
|
335
349
|
```bash
|
|
@@ -13,14 +13,15 @@ It is intentionally markdown-only so it can be copied into a local skills direct
|
|
|
13
13
|
Ask an agent or harness using the skill to emit a receipt for one workflow and verify these constraints:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
grep -E 'mcp\.tool_index\.loaded|context\.skill\.registry\.index\.loaded|subagent\.mcp_policy\.applied|subagent\.toolsearch\.propagation\.evaluated|subagent\.delegation\.requested' receipt.jsonl
|
|
17
|
-
grep -E 'raw_(schema|query|args|result|output)_copied":false|raw.*CopiedToReceipt":false' receipt.jsonl
|
|
16
|
+
grep -E 'mcp\.tool_index\.loaded|context\.skill\.registry\.index\.loaded|subagent\.mcp_policy\.applied|subagent\.toolsearch\.propagation\.evaluated|context\.prune\.completed|subagent\.delegation\.requested' receipt.jsonl
|
|
17
|
+
grep -E 'raw_(schema|query|args|result|output|transcript|text)_copied":false|raw.*CopiedToReceipt":false' receipt.jsonl
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
Then manually check that the receipt contains counts, hashes, ids, buckets, and `audit_gap`, but does **not** contain private prompts, raw schemas, tool args/results, skill bodies, memory bodies, customer names, secrets, or transcript text.
|
|
21
21
|
|
|
22
|
-
For executable fixture examples, see [`../../context-input-evidence/`](../../context-input-evidence/), including the ToolSearch propagation
|
|
22
|
+
For executable fixture examples, see [`../../context-input-evidence/`](../../context-input-evidence/), including the ToolSearch propagation and pruning smokes:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
node ../../context-input-evidence/convert-subagent-toolsearch-propagation-log.mjs
|
|
26
|
+
node ../../context-input-evidence/convert-pruning-log.mjs
|
|
26
27
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Context Receipts
|
|
2
2
|
|
|
3
|
-
Use this skill when an agent workflow claims to save context by selecting, deferring, hydrating, summarizing, compacting, delegating, or isolating context.
|
|
3
|
+
Use this skill when an agent workflow claims to save context by selecting, deferring, hydrating, summarizing, compacting, pruning, delegating, or isolating context.
|
|
4
4
|
|
|
5
5
|
The job is not to log the private content. The job is to emit a small receipt that lets a reviewer answer:
|
|
6
6
|
|
|
@@ -95,6 +95,25 @@ Minimal JSONL event names:
|
|
|
95
95
|
{"event":"subagent.toolsearch.matrix.completed","tested_axis":"tools_frontmatter_shape","audit_gap":"proves ToolSearch exposure, not semantic tool relevance or runtime call success"}
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
+
## Pruning / compaction smoke
|
|
99
|
+
|
|
100
|
+
For context-cleaning, pruning, compaction, or doctor/guard tools, answer:
|
|
101
|
+
|
|
102
|
+
- what prescription/trigger started the run;
|
|
103
|
+
- which strategies changed context and which candidates were protected;
|
|
104
|
+
- before/after token and byte buckets;
|
|
105
|
+
- whether summaries, behavioral digests, team messages, and backups were preserved;
|
|
106
|
+
- whether private transcript text, raw tool output, file paths, secrets, and customer text were excluded from the receipt;
|
|
107
|
+
- the remaining audit gap, such as not proving semantic quality of the pruned text.
|
|
108
|
+
|
|
109
|
+
Minimal JSONL event names:
|
|
110
|
+
|
|
111
|
+
```jsonl
|
|
112
|
+
{"event":"context.prune.started","prescription":"balanced","trigger":"manual_dry_run","before_token_bucket":"150k_200k","raw_transcript_copied":false}
|
|
113
|
+
{"event":"context.prune.strategy.evaluated","strategy":"tool-output-trim","candidate_bucket":"10_25","changed_bucket":"5_10","protected_bucket":"1_5","raw_tool_output_copied":false}
|
|
114
|
+
{"event":"context.prune.completed","after_token_bucket":"75k_100k","backup_verified":true,"protected_summary_count":2,"raw_text_copied":false,"audit_gap":"proves pruning/protection counts, not semantic disposability"}
|
|
115
|
+
```
|
|
116
|
+
|
|
98
117
|
## Subagent / manager boundary smoke
|
|
99
118
|
|
|
100
119
|
For subagents, manager agents, or child workers, answer:
|
|
@@ -120,6 +139,6 @@ A receipt is useful if a maintainer can debug one of these failures without seei
|
|
|
120
139
|
- the full definition loaded too early;
|
|
121
140
|
- too many definitions stayed in context;
|
|
122
141
|
- a child/subagent saved no budget because raw output returned to the parent;
|
|
123
|
-
- compaction happened but no one can prove what was
|
|
142
|
+
- compaction/pruning happened but no one can prove what was changed, protected, backed up, summarized, or dropped.
|
|
124
143
|
|
|
125
144
|
A receipt is not enough if it only says “Tool Search enabled” or “used subagent”. It must prove the boundary behavior.
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const inputPath = process.argv[2] ? resolve(process.argv[2]) : join(here, 'sample-pruning-log.jsonl');
|
|
9
|
+
const receiptPath = process.argv[3] ? resolve(process.argv[3]) : join(here, 'pruning-receipt.ndjson');
|
|
10
|
+
const tracePath = process.argv[4] ? resolve(process.argv[4]) : join(here, 'pruning-otel-trace.json');
|
|
11
|
+
|
|
12
|
+
function sha256(value) {
|
|
13
|
+
return `sha256:${createHash('sha256').update(value ?? '').digest('hex')}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function hashRef(value) {
|
|
17
|
+
return sha256(value ?? '').slice(0, 19);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function readJsonl(path) {
|
|
21
|
+
return readFileSync(path, 'utf8')
|
|
22
|
+
.trim()
|
|
23
|
+
.split('\n')
|
|
24
|
+
.filter(Boolean)
|
|
25
|
+
.map((line, index) => {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(line);
|
|
28
|
+
} catch (error) {
|
|
29
|
+
throw new Error(`Invalid JSONL at ${path}:${index + 1}: ${error.message}`);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function unixNano(isoTimestamp) {
|
|
35
|
+
return `${BigInt(Date.parse(isoTimestamp)) * 1_000_000n}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function otelValue(value) {
|
|
39
|
+
if (typeof value === 'boolean') return { boolValue: value };
|
|
40
|
+
if (typeof value === 'number' && Number.isInteger(value)) return { intValue: String(value) };
|
|
41
|
+
if (typeof value === 'number') return { doubleValue: value };
|
|
42
|
+
if (value == null) return { stringValue: '' };
|
|
43
|
+
return { stringValue: String(value) };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function attributesToOtel(attributes) {
|
|
47
|
+
return Object.entries(attributes).map(([key, value]) => ({ key, value: otelValue(value) }));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function tokenBucket(value) {
|
|
51
|
+
if (value < 1_000) return 'under_1k';
|
|
52
|
+
if (value < 10_000) return 'under_10k';
|
|
53
|
+
if (value < 50_000) return 'under_50k';
|
|
54
|
+
if (value < 100_000) return 'under_100k';
|
|
55
|
+
return 'over_100k';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function bytesBucket(value) {
|
|
59
|
+
if (value < 1024) return 'under_1kb';
|
|
60
|
+
if (value < 1024 * 1024) return 'under_1mb';
|
|
61
|
+
if (value < 10 * 1024 * 1024) return 'under_10mb';
|
|
62
|
+
if (value < 50 * 1024 * 1024) return 'under_50mb';
|
|
63
|
+
return 'over_50mb';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function countBucket(value) {
|
|
67
|
+
if (value === 0) return 'zero';
|
|
68
|
+
if (value <= 5) return 'under_5';
|
|
69
|
+
if (value <= 25) return 'under_25';
|
|
70
|
+
if (value <= 100) return 'under_100';
|
|
71
|
+
if (value <= 500) return 'under_500';
|
|
72
|
+
return 'over_500';
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function ratioBucket(numerator, denominator) {
|
|
76
|
+
const ratio = denominator > 0 ? numerator / denominator : 0;
|
|
77
|
+
if (ratio < 0.25) return 'under_25_percent';
|
|
78
|
+
if (ratio < 0.5) return 'under_50_percent';
|
|
79
|
+
if (ratio < 0.75) return 'under_75_percent';
|
|
80
|
+
if (ratio < 0.9) return 'under_90_percent';
|
|
81
|
+
return 'over_90_percent';
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const records = readJsonl(inputPath);
|
|
85
|
+
const session = records.find((record) => record.type === 'session.start');
|
|
86
|
+
const start = records.find((record) => record.type === 'context.prune.start');
|
|
87
|
+
const strategies = records.filter((record) => record.type === 'context.prune.strategy.evaluated');
|
|
88
|
+
const completed = records.find((record) => record.type === 'context.prune.completed');
|
|
89
|
+
|
|
90
|
+
if (!session || !start || strategies.length === 0 || !completed) {
|
|
91
|
+
throw new Error(`Expected session.start, context.prune.start, strategy evaluations, and context.prune.completed records in ${inputPath}`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const traceSeed = `${session.session_id}:${start.run_id}:context-pruning`;
|
|
95
|
+
const traceId = sha256(traceSeed).replace('sha256:', '').slice(0, 32);
|
|
96
|
+
const spanId = sha256(`${traceSeed}:span`).replace('sha256:', '').slice(0, 16);
|
|
97
|
+
const runIdHash = hashRef(start.run_id);
|
|
98
|
+
|
|
99
|
+
const startedEvent = {
|
|
100
|
+
trace_id: traceId,
|
|
101
|
+
span_id: spanId,
|
|
102
|
+
name: 'context.prune.started',
|
|
103
|
+
time: start.time,
|
|
104
|
+
attributes: {
|
|
105
|
+
'session.id': session.session_id,
|
|
106
|
+
'gen_ai.conversation.id': session.conversation_id,
|
|
107
|
+
'agent.name': session.agent,
|
|
108
|
+
'context.prune.run_id_hash': runIdHash,
|
|
109
|
+
'context.prune.tool': start.tool,
|
|
110
|
+
'context.prune.command_hash': sha256(start.command),
|
|
111
|
+
'context.prune.prescription': start.prescription,
|
|
112
|
+
'context.prune.mode': start.mode,
|
|
113
|
+
'context.prune.trigger': start.trigger,
|
|
114
|
+
'context.prune.context_window_bucket': tokenBucket(start.context_window_tokens),
|
|
115
|
+
'context.prune.token_count.before_bucket': tokenBucket(start.token_count_before),
|
|
116
|
+
'context.prune.byte_count.before_bucket': bytesBucket(start.byte_count_before),
|
|
117
|
+
'context.prune.start_ratio_bucket': ratioBucket(start.token_count_before, start.context_window_tokens),
|
|
118
|
+
'context.prune.backup_id_hash': hashRef(start.backup_id),
|
|
119
|
+
'context.prune.backup.created': true,
|
|
120
|
+
'context.prune.plan.hash': sha256(start.raw_plan_notes),
|
|
121
|
+
'privacy.raw_session_recorded': false,
|
|
122
|
+
'privacy.raw_plan_recorded': false,
|
|
123
|
+
'privacy.raw_prompt_recorded': false,
|
|
124
|
+
'privacy.raw_tool_output_recorded': false
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const strategyEvents = strategies.map((strategy) => ({
|
|
129
|
+
trace_id: traceId,
|
|
130
|
+
span_id: spanId,
|
|
131
|
+
name: 'context.prune.strategy.evaluated',
|
|
132
|
+
time: strategy.time,
|
|
133
|
+
attributes: {
|
|
134
|
+
'session.id': session.session_id,
|
|
135
|
+
'gen_ai.conversation.id': session.conversation_id,
|
|
136
|
+
'context.prune.run_id_hash': runIdHash,
|
|
137
|
+
'context.prune.strategy': strategy.strategy,
|
|
138
|
+
'context.prune.strategy.action': strategy.action,
|
|
139
|
+
'context.prune.strategy.candidate_count_bucket': countBucket(strategy.candidate_count),
|
|
140
|
+
'context.prune.strategy.changed_count_bucket': countBucket(strategy.changed_count),
|
|
141
|
+
'context.prune.strategy.protected_count_bucket': countBucket(strategy.protected_count),
|
|
142
|
+
'context.prune.strategy.token_count.before_bucket': tokenBucket(strategy.token_count_before),
|
|
143
|
+
'context.prune.strategy.token_count.removed_bucket': tokenBucket(strategy.token_count_removed),
|
|
144
|
+
'context.prune.strategy.byte_count.removed_bucket': bytesBucket(strategy.byte_count_removed),
|
|
145
|
+
'context.prune.strategy.reason_hash': sha256(strategy.reason),
|
|
146
|
+
'context.prune.strategy.sample_hash': sha256(strategy.raw_sample),
|
|
147
|
+
'context.prune.strategy.raw_text_recorded': false,
|
|
148
|
+
'privacy.raw_session_recorded': false,
|
|
149
|
+
'privacy.raw_tool_output_recorded': false,
|
|
150
|
+
'privacy.raw_file_content_recorded': false
|
|
151
|
+
}
|
|
152
|
+
}));
|
|
153
|
+
|
|
154
|
+
const completedEvent = {
|
|
155
|
+
trace_id: traceId,
|
|
156
|
+
span_id: spanId,
|
|
157
|
+
name: 'context.prune.completed',
|
|
158
|
+
time: completed.time,
|
|
159
|
+
attributes: {
|
|
160
|
+
'session.id': session.session_id,
|
|
161
|
+
'gen_ai.conversation.id': session.conversation_id,
|
|
162
|
+
'context.prune.run_id_hash': runIdHash,
|
|
163
|
+
'context.prune.status': completed.status,
|
|
164
|
+
'context.prune.token_count.after_bucket': tokenBucket(completed.token_count_after),
|
|
165
|
+
'context.prune.byte_count.after_bucket': bytesBucket(completed.byte_count_after),
|
|
166
|
+
'context.prune.token_count.removed_bucket': tokenBucket(completed.total_token_count_removed),
|
|
167
|
+
'context.prune.byte_count.removed_bucket': bytesBucket(completed.total_byte_count_removed),
|
|
168
|
+
'context.prune.end_ratio_bucket': ratioBucket(completed.token_count_after, start.context_window_tokens),
|
|
169
|
+
'context.prune.changed_item_count_bucket': countBucket(completed.changed_item_count),
|
|
170
|
+
'context.prune.protected_item_count_bucket': countBucket(completed.protected_item_count),
|
|
171
|
+
'context.prune.backup.verified': completed.backup_verified,
|
|
172
|
+
'context.prune.summary.hash': sha256(completed.raw_summary),
|
|
173
|
+
'context.prune.audit_gap': completed.audit_gap,
|
|
174
|
+
'privacy.raw_session_recorded': false,
|
|
175
|
+
'privacy.raw_summary_recorded': false,
|
|
176
|
+
'privacy.raw_tool_output_recorded': false,
|
|
177
|
+
'privacy.raw_file_content_recorded': false
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const events = [startedEvent, ...strategyEvents, completedEvent]
|
|
182
|
+
.sort((left, right) => Date.parse(left.time) - Date.parse(right.time));
|
|
183
|
+
|
|
184
|
+
writeFileSync(receiptPath, `${events.map((event) => JSON.stringify(event)).join('\n')}\n`);
|
|
185
|
+
|
|
186
|
+
const trace = {
|
|
187
|
+
resourceSpans: [
|
|
188
|
+
{
|
|
189
|
+
resource: {
|
|
190
|
+
attributes: attributesToOtel({
|
|
191
|
+
'service.name': 'pluribus-context-pruning-receipt-demo',
|
|
192
|
+
'service.version': '0.0.0-fixture',
|
|
193
|
+
'deployment.environment.name': 'local-fixture'
|
|
194
|
+
})
|
|
195
|
+
},
|
|
196
|
+
scopeSpans: [
|
|
197
|
+
{
|
|
198
|
+
scope: {
|
|
199
|
+
name: 'pluribus.context_input_evidence.pruning_demo',
|
|
200
|
+
version: '0.0.0-fixture'
|
|
201
|
+
},
|
|
202
|
+
spans: [
|
|
203
|
+
{
|
|
204
|
+
traceId,
|
|
205
|
+
spanId,
|
|
206
|
+
parentSpanId: '',
|
|
207
|
+
name: 'agent.session.context_prune',
|
|
208
|
+
kind: 1,
|
|
209
|
+
startTimeUnixNano: unixNano(start.time),
|
|
210
|
+
endTimeUnixNano: unixNano(completed.time),
|
|
211
|
+
attributes: attributesToOtel({
|
|
212
|
+
'session.id': session.session_id,
|
|
213
|
+
'gen_ai.conversation.id': session.conversation_id,
|
|
214
|
+
'agent.name': session.agent,
|
|
215
|
+
'workspace.name': session.workspace,
|
|
216
|
+
'gen_ai.request.model': session.model,
|
|
217
|
+
'context.prune.run_id_hash': runIdHash,
|
|
218
|
+
'context.prune.prescription': start.prescription,
|
|
219
|
+
'context.prune.mode': start.mode,
|
|
220
|
+
'context.prune.trigger': start.trigger
|
|
221
|
+
}),
|
|
222
|
+
events: events.map((event) => ({
|
|
223
|
+
name: event.name,
|
|
224
|
+
timeUnixNano: unixNano(event.time),
|
|
225
|
+
attributes: attributesToOtel(event.attributes)
|
|
226
|
+
}))
|
|
227
|
+
}
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
writeFileSync(tracePath, `${JSON.stringify(trace, null, 2)}\n`);
|
|
236
|
+
|
|
237
|
+
const forbiddenRawStrings = [
|
|
238
|
+
'Acme-Co',
|
|
239
|
+
'sk_live_private_fixture',
|
|
240
|
+
'finance@acme.example',
|
|
241
|
+
'Bearer private_fixture',
|
|
242
|
+
'PAY-1234',
|
|
243
|
+
'/workspace/acme',
|
|
244
|
+
'/private/work/acme',
|
|
245
|
+
'private support transcript',
|
|
246
|
+
'internal deployment host',
|
|
247
|
+
'private order',
|
|
248
|
+
'auth header'
|
|
249
|
+
];
|
|
250
|
+
const exportedText = `${events.map((event) => JSON.stringify(event)).join('\n')}\n${JSON.stringify(trace)}`;
|
|
251
|
+
const rawTextCopiedToReceipt = forbiddenRawStrings.some((value) => exportedText.includes(value));
|
|
252
|
+
const strategyActionCounts = strategies.reduce((counts, strategy) => {
|
|
253
|
+
counts[strategy.action] = (counts[strategy.action] ?? 0) + 1;
|
|
254
|
+
return counts;
|
|
255
|
+
}, {});
|
|
256
|
+
|
|
257
|
+
const summary = {
|
|
258
|
+
schema: 'pluribus.contextPruningReceipt.demo.v0',
|
|
259
|
+
eventCount: events.length,
|
|
260
|
+
strategyEvents: strategyEvents.length,
|
|
261
|
+
strategyActionCounts,
|
|
262
|
+
tokenBeforeBucket: startedEvent.attributes['context.prune.token_count.before_bucket'],
|
|
263
|
+
tokenAfterBucket: completedEvent.attributes['context.prune.token_count.after_bucket'],
|
|
264
|
+
tokenRemovedBucket: completedEvent.attributes['context.prune.token_count.removed_bucket'],
|
|
265
|
+
changedItemCountBucket: completedEvent.attributes['context.prune.changed_item_count_bucket'],
|
|
266
|
+
protectedItemCountBucket: completedEvent.attributes['context.prune.protected_item_count_bucket'],
|
|
267
|
+
backupVerified: completedEvent.attributes['context.prune.backup.verified'],
|
|
268
|
+
includesAuditGap: completedEvent.attributes['context.prune.audit_gap'],
|
|
269
|
+
rawTextCopiedToReceipt,
|
|
270
|
+
receiptPath: 'examples/context-input-evidence/pruning-receipt.ndjson',
|
|
271
|
+
tracePath: 'examples/context-input-evidence/pruning-otel-trace.json',
|
|
272
|
+
lesson: 'Post-hoc context cleaning needs receipts for what was pruned, minified, stubbed, protected, backed up, and kept private; token savings alone do not prove safe context preservation.'
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
console.log(JSON.stringify(summary, null, 2));
|
|
@@ -0,0 +1,885 @@
|
|
|
1
|
+
{
|
|
2
|
+
"resourceSpans": [
|
|
3
|
+
{
|
|
4
|
+
"resource": {
|
|
5
|
+
"attributes": [
|
|
6
|
+
{
|
|
7
|
+
"key": "service.name",
|
|
8
|
+
"value": {
|
|
9
|
+
"stringValue": "pluribus-context-pruning-receipt-demo"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"key": "service.version",
|
|
14
|
+
"value": {
|
|
15
|
+
"stringValue": "0.0.0-fixture"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"key": "deployment.environment.name",
|
|
20
|
+
"value": {
|
|
21
|
+
"stringValue": "local-fixture"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"scopeSpans": [
|
|
27
|
+
{
|
|
28
|
+
"scope": {
|
|
29
|
+
"name": "pluribus.context_input_evidence.pruning_demo",
|
|
30
|
+
"version": "0.0.0-fixture"
|
|
31
|
+
},
|
|
32
|
+
"spans": [
|
|
33
|
+
{
|
|
34
|
+
"traceId": "9b0e4cae70987c85d72e866e2d3c6af0",
|
|
35
|
+
"spanId": "ddb3bc1e5eeda6ab",
|
|
36
|
+
"parentSpanId": "",
|
|
37
|
+
"name": "agent.session.context_prune",
|
|
38
|
+
"kind": 1,
|
|
39
|
+
"startTimeUnixNano": "1779750242000000000",
|
|
40
|
+
"endTimeUnixNano": "1779750249000000000",
|
|
41
|
+
"attributes": [
|
|
42
|
+
{
|
|
43
|
+
"key": "session.id",
|
|
44
|
+
"value": {
|
|
45
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"key": "gen_ai.conversation.id",
|
|
50
|
+
"value": {
|
|
51
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"key": "agent.name",
|
|
56
|
+
"value": {
|
|
57
|
+
"stringValue": "claude-code"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"key": "workspace.name",
|
|
62
|
+
"value": {
|
|
63
|
+
"stringValue": "private-support-monorepo"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"key": "gen_ai.request.model",
|
|
68
|
+
"value": {
|
|
69
|
+
"stringValue": "claude-opus-4-1"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"key": "context.prune.run_id_hash",
|
|
74
|
+
"value": {
|
|
75
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"key": "context.prune.prescription",
|
|
80
|
+
"value": {
|
|
81
|
+
"stringValue": "standard"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"key": "context.prune.mode",
|
|
86
|
+
"value": {
|
|
87
|
+
"stringValue": "execute"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"key": "context.prune.trigger",
|
|
92
|
+
"value": {
|
|
93
|
+
"stringValue": "guard_hard_threshold"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"events": [
|
|
98
|
+
{
|
|
99
|
+
"name": "context.prune.started",
|
|
100
|
+
"timeUnixNano": "1779750242000000000",
|
|
101
|
+
"attributes": [
|
|
102
|
+
{
|
|
103
|
+
"key": "session.id",
|
|
104
|
+
"value": {
|
|
105
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"key": "gen_ai.conversation.id",
|
|
110
|
+
"value": {
|
|
111
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"key": "agent.name",
|
|
116
|
+
"value": {
|
|
117
|
+
"stringValue": "claude-code"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"key": "context.prune.run_id_hash",
|
|
122
|
+
"value": {
|
|
123
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"key": "context.prune.tool",
|
|
128
|
+
"value": {
|
|
129
|
+
"stringValue": "cozempic-like-cleaner"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"key": "context.prune.command_hash",
|
|
134
|
+
"value": {
|
|
135
|
+
"stringValue": "sha256:6e5b215f520cbcda7b87bf4a80618230b84f9fc400faaa398213033d8f1e828a"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"key": "context.prune.prescription",
|
|
140
|
+
"value": {
|
|
141
|
+
"stringValue": "standard"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"key": "context.prune.mode",
|
|
146
|
+
"value": {
|
|
147
|
+
"stringValue": "execute"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"key": "context.prune.trigger",
|
|
152
|
+
"value": {
|
|
153
|
+
"stringValue": "guard_hard_threshold"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"key": "context.prune.context_window_bucket",
|
|
158
|
+
"value": {
|
|
159
|
+
"stringValue": "over_100k"
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"key": "context.prune.token_count.before_bucket",
|
|
164
|
+
"value": {
|
|
165
|
+
"stringValue": "over_100k"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"key": "context.prune.byte_count.before_bucket",
|
|
170
|
+
"value": {
|
|
171
|
+
"stringValue": "under_10mb"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"key": "context.prune.start_ratio_bucket",
|
|
176
|
+
"value": {
|
|
177
|
+
"stringValue": "under_75_percent"
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"key": "context.prune.backup_id_hash",
|
|
182
|
+
"value": {
|
|
183
|
+
"stringValue": "sha256:2ae8b398160d"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"key": "context.prune.backup.created",
|
|
188
|
+
"value": {
|
|
189
|
+
"boolValue": true
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"key": "context.prune.plan.hash",
|
|
194
|
+
"value": {
|
|
195
|
+
"stringValue": "sha256:76b5db8f0e5ac89df3c1162c9e28b0368e0462b6c189ac82244533041f3fcd6b"
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"key": "privacy.raw_session_recorded",
|
|
200
|
+
"value": {
|
|
201
|
+
"boolValue": false
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"key": "privacy.raw_plan_recorded",
|
|
206
|
+
"value": {
|
|
207
|
+
"boolValue": false
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"key": "privacy.raw_prompt_recorded",
|
|
212
|
+
"value": {
|
|
213
|
+
"boolValue": false
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"key": "privacy.raw_tool_output_recorded",
|
|
218
|
+
"value": {
|
|
219
|
+
"boolValue": false
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"name": "context.prune.strategy.evaluated",
|
|
226
|
+
"timeUnixNano": "1779750243000000000",
|
|
227
|
+
"attributes": [
|
|
228
|
+
{
|
|
229
|
+
"key": "session.id",
|
|
230
|
+
"value": {
|
|
231
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"key": "gen_ai.conversation.id",
|
|
236
|
+
"value": {
|
|
237
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"key": "context.prune.run_id_hash",
|
|
242
|
+
"value": {
|
|
243
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"key": "context.prune.strategy",
|
|
248
|
+
"value": {
|
|
249
|
+
"stringValue": "compact-summary-collapse"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"key": "context.prune.strategy.action",
|
|
254
|
+
"value": {
|
|
255
|
+
"stringValue": "protected"
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"key": "context.prune.strategy.candidate_count_bucket",
|
|
260
|
+
"value": {
|
|
261
|
+
"stringValue": "under_5"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"key": "context.prune.strategy.changed_count_bucket",
|
|
266
|
+
"value": {
|
|
267
|
+
"stringValue": "zero"
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"key": "context.prune.strategy.protected_count_bucket",
|
|
272
|
+
"value": {
|
|
273
|
+
"stringValue": "under_5"
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"key": "context.prune.strategy.token_count.before_bucket",
|
|
278
|
+
"value": {
|
|
279
|
+
"stringValue": "under_50k"
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"key": "context.prune.strategy.token_count.removed_bucket",
|
|
284
|
+
"value": {
|
|
285
|
+
"stringValue": "under_1k"
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"key": "context.prune.strategy.byte_count.removed_bucket",
|
|
290
|
+
"value": {
|
|
291
|
+
"stringValue": "under_1kb"
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"key": "context.prune.strategy.reason_hash",
|
|
296
|
+
"value": {
|
|
297
|
+
"stringValue": "sha256:ec5620dcdf7780a61b178b0528e3586a72a01f70b17af35176b0a257ba166fc0"
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"key": "context.prune.strategy.sample_hash",
|
|
302
|
+
"value": {
|
|
303
|
+
"stringValue": "sha256:e6fa1ade672423349cf768a1e9f043aad95be0f501c964b21987971ebd1bc89a"
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"key": "context.prune.strategy.raw_text_recorded",
|
|
308
|
+
"value": {
|
|
309
|
+
"boolValue": false
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"key": "privacy.raw_session_recorded",
|
|
314
|
+
"value": {
|
|
315
|
+
"boolValue": false
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"key": "privacy.raw_tool_output_recorded",
|
|
320
|
+
"value": {
|
|
321
|
+
"boolValue": false
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"key": "privacy.raw_file_content_recorded",
|
|
326
|
+
"value": {
|
|
327
|
+
"boolValue": false
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"name": "context.prune.strategy.evaluated",
|
|
334
|
+
"timeUnixNano": "1779750244000000000",
|
|
335
|
+
"attributes": [
|
|
336
|
+
{
|
|
337
|
+
"key": "session.id",
|
|
338
|
+
"value": {
|
|
339
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"key": "gen_ai.conversation.id",
|
|
344
|
+
"value": {
|
|
345
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"key": "context.prune.run_id_hash",
|
|
350
|
+
"value": {
|
|
351
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"key": "context.prune.strategy",
|
|
356
|
+
"value": {
|
|
357
|
+
"stringValue": "tool-output-trim"
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"key": "context.prune.strategy.action",
|
|
362
|
+
"value": {
|
|
363
|
+
"stringValue": "trimmed"
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"key": "context.prune.strategy.candidate_count_bucket",
|
|
368
|
+
"value": {
|
|
369
|
+
"stringValue": "under_25"
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"key": "context.prune.strategy.changed_count_bucket",
|
|
374
|
+
"value": {
|
|
375
|
+
"stringValue": "under_25"
|
|
376
|
+
}
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"key": "context.prune.strategy.protected_count_bucket",
|
|
380
|
+
"value": {
|
|
381
|
+
"stringValue": "under_5"
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"key": "context.prune.strategy.token_count.before_bucket",
|
|
386
|
+
"value": {
|
|
387
|
+
"stringValue": "under_50k"
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"key": "context.prune.strategy.token_count.removed_bucket",
|
|
392
|
+
"value": {
|
|
393
|
+
"stringValue": "under_50k"
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"key": "context.prune.strategy.byte_count.removed_bucket",
|
|
398
|
+
"value": {
|
|
399
|
+
"stringValue": "under_10mb"
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"key": "context.prune.strategy.reason_hash",
|
|
404
|
+
"value": {
|
|
405
|
+
"stringValue": "sha256:83c47780facad7b3b3490be8a372bca7ac820e0ab723f90599ca24f09763f0b0"
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"key": "context.prune.strategy.sample_hash",
|
|
410
|
+
"value": {
|
|
411
|
+
"stringValue": "sha256:c99730548cf4f54e4948cde0dd2ee61a0e7fe12d9f5a31cf7b39d4d5f86f0bf0"
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"key": "context.prune.strategy.raw_text_recorded",
|
|
416
|
+
"value": {
|
|
417
|
+
"boolValue": false
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"key": "privacy.raw_session_recorded",
|
|
422
|
+
"value": {
|
|
423
|
+
"boolValue": false
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"key": "privacy.raw_tool_output_recorded",
|
|
428
|
+
"value": {
|
|
429
|
+
"boolValue": false
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"key": "privacy.raw_file_content_recorded",
|
|
434
|
+
"value": {
|
|
435
|
+
"boolValue": false
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
]
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"name": "context.prune.strategy.evaluated",
|
|
442
|
+
"timeUnixNano": "1779750245000000000",
|
|
443
|
+
"attributes": [
|
|
444
|
+
{
|
|
445
|
+
"key": "session.id",
|
|
446
|
+
"value": {
|
|
447
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"key": "gen_ai.conversation.id",
|
|
452
|
+
"value": {
|
|
453
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
454
|
+
}
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"key": "context.prune.run_id_hash",
|
|
458
|
+
"value": {
|
|
459
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
"key": "context.prune.strategy",
|
|
464
|
+
"value": {
|
|
465
|
+
"stringValue": "tool-result-age"
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"key": "context.prune.strategy.action",
|
|
470
|
+
"value": {
|
|
471
|
+
"stringValue": "minified"
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"key": "context.prune.strategy.candidate_count_bucket",
|
|
476
|
+
"value": {
|
|
477
|
+
"stringValue": "under_25"
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"key": "context.prune.strategy.changed_count_bucket",
|
|
482
|
+
"value": {
|
|
483
|
+
"stringValue": "under_25"
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"key": "context.prune.strategy.protected_count_bucket",
|
|
488
|
+
"value": {
|
|
489
|
+
"stringValue": "under_5"
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"key": "context.prune.strategy.token_count.before_bucket",
|
|
494
|
+
"value": {
|
|
495
|
+
"stringValue": "under_50k"
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
"key": "context.prune.strategy.token_count.removed_bucket",
|
|
500
|
+
"value": {
|
|
501
|
+
"stringValue": "under_50k"
|
|
502
|
+
}
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
"key": "context.prune.strategy.byte_count.removed_bucket",
|
|
506
|
+
"value": {
|
|
507
|
+
"stringValue": "under_10mb"
|
|
508
|
+
}
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"key": "context.prune.strategy.reason_hash",
|
|
512
|
+
"value": {
|
|
513
|
+
"stringValue": "sha256:ead46a2482d65359b9848cdbc410a0132c0ef70dfd71be5832cd8332018e3829"
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"key": "context.prune.strategy.sample_hash",
|
|
518
|
+
"value": {
|
|
519
|
+
"stringValue": "sha256:a517b1809dfd0bbe03adef577f133150a729acd9e90409594e6ec21914c4a551"
|
|
520
|
+
}
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"key": "context.prune.strategy.raw_text_recorded",
|
|
524
|
+
"value": {
|
|
525
|
+
"boolValue": false
|
|
526
|
+
}
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
"key": "privacy.raw_session_recorded",
|
|
530
|
+
"value": {
|
|
531
|
+
"boolValue": false
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"key": "privacy.raw_tool_output_recorded",
|
|
536
|
+
"value": {
|
|
537
|
+
"boolValue": false
|
|
538
|
+
}
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"key": "privacy.raw_file_content_recorded",
|
|
542
|
+
"value": {
|
|
543
|
+
"boolValue": false
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
]
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"name": "context.prune.strategy.evaluated",
|
|
550
|
+
"timeUnixNano": "1779750246000000000",
|
|
551
|
+
"attributes": [
|
|
552
|
+
{
|
|
553
|
+
"key": "session.id",
|
|
554
|
+
"value": {
|
|
555
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"key": "gen_ai.conversation.id",
|
|
560
|
+
"value": {
|
|
561
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"key": "context.prune.run_id_hash",
|
|
566
|
+
"value": {
|
|
567
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
568
|
+
}
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"key": "context.prune.strategy",
|
|
572
|
+
"value": {
|
|
573
|
+
"stringValue": "document-dedup"
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"key": "context.prune.strategy.action",
|
|
578
|
+
"value": {
|
|
579
|
+
"stringValue": "deduped"
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
"key": "context.prune.strategy.candidate_count_bucket",
|
|
584
|
+
"value": {
|
|
585
|
+
"stringValue": "under_25"
|
|
586
|
+
}
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"key": "context.prune.strategy.changed_count_bucket",
|
|
590
|
+
"value": {
|
|
591
|
+
"stringValue": "under_5"
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"key": "context.prune.strategy.protected_count_bucket",
|
|
596
|
+
"value": {
|
|
597
|
+
"stringValue": "zero"
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
"key": "context.prune.strategy.token_count.before_bucket",
|
|
602
|
+
"value": {
|
|
603
|
+
"stringValue": "under_50k"
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
"key": "context.prune.strategy.token_count.removed_bucket",
|
|
608
|
+
"value": {
|
|
609
|
+
"stringValue": "under_50k"
|
|
610
|
+
}
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
"key": "context.prune.strategy.byte_count.removed_bucket",
|
|
614
|
+
"value": {
|
|
615
|
+
"stringValue": "under_1mb"
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"key": "context.prune.strategy.reason_hash",
|
|
620
|
+
"value": {
|
|
621
|
+
"stringValue": "sha256:cecb93bebe7b8d60542938693d6525dc5c5e3255e80e55b61dc3efdd2a9edf1c"
|
|
622
|
+
}
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
"key": "context.prune.strategy.sample_hash",
|
|
626
|
+
"value": {
|
|
627
|
+
"stringValue": "sha256:edf3c3df1f1c430b9672833e7d736f387075f7ccd9815f72ca4c4ed46ea8fa2f"
|
|
628
|
+
}
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"key": "context.prune.strategy.raw_text_recorded",
|
|
632
|
+
"value": {
|
|
633
|
+
"boolValue": false
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
"key": "privacy.raw_session_recorded",
|
|
638
|
+
"value": {
|
|
639
|
+
"boolValue": false
|
|
640
|
+
}
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"key": "privacy.raw_tool_output_recorded",
|
|
644
|
+
"value": {
|
|
645
|
+
"boolValue": false
|
|
646
|
+
}
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
"key": "privacy.raw_file_content_recorded",
|
|
650
|
+
"value": {
|
|
651
|
+
"boolValue": false
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
]
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
"name": "context.prune.strategy.evaluated",
|
|
658
|
+
"timeUnixNano": "1779750247000000000",
|
|
659
|
+
"attributes": [
|
|
660
|
+
{
|
|
661
|
+
"key": "session.id",
|
|
662
|
+
"value": {
|
|
663
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
664
|
+
}
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"key": "gen_ai.conversation.id",
|
|
668
|
+
"value": {
|
|
669
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
670
|
+
}
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
"key": "context.prune.run_id_hash",
|
|
674
|
+
"value": {
|
|
675
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"key": "context.prune.strategy",
|
|
680
|
+
"value": {
|
|
681
|
+
"stringValue": "behavioral-digest"
|
|
682
|
+
}
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
"key": "context.prune.strategy.action",
|
|
686
|
+
"value": {
|
|
687
|
+
"stringValue": "protected"
|
|
688
|
+
}
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
"key": "context.prune.strategy.candidate_count_bucket",
|
|
692
|
+
"value": {
|
|
693
|
+
"stringValue": "under_5"
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"key": "context.prune.strategy.changed_count_bucket",
|
|
698
|
+
"value": {
|
|
699
|
+
"stringValue": "zero"
|
|
700
|
+
}
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
"key": "context.prune.strategy.protected_count_bucket",
|
|
704
|
+
"value": {
|
|
705
|
+
"stringValue": "under_5"
|
|
706
|
+
}
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
"key": "context.prune.strategy.token_count.before_bucket",
|
|
710
|
+
"value": {
|
|
711
|
+
"stringValue": "under_10k"
|
|
712
|
+
}
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
"key": "context.prune.strategy.token_count.removed_bucket",
|
|
716
|
+
"value": {
|
|
717
|
+
"stringValue": "under_1k"
|
|
718
|
+
}
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"key": "context.prune.strategy.byte_count.removed_bucket",
|
|
722
|
+
"value": {
|
|
723
|
+
"stringValue": "under_1kb"
|
|
724
|
+
}
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
"key": "context.prune.strategy.reason_hash",
|
|
728
|
+
"value": {
|
|
729
|
+
"stringValue": "sha256:8a373baf84c1899e5a1d0a63888419a85d21950e482684aac3418f987d8481ff"
|
|
730
|
+
}
|
|
731
|
+
},
|
|
732
|
+
{
|
|
733
|
+
"key": "context.prune.strategy.sample_hash",
|
|
734
|
+
"value": {
|
|
735
|
+
"stringValue": "sha256:a5a03cc5c544d0eef6ebe24466d4af1b9cf64dd0767aa1a45e17f3ad2b5cb661"
|
|
736
|
+
}
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
"key": "context.prune.strategy.raw_text_recorded",
|
|
740
|
+
"value": {
|
|
741
|
+
"boolValue": false
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
"key": "privacy.raw_session_recorded",
|
|
746
|
+
"value": {
|
|
747
|
+
"boolValue": false
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
"key": "privacy.raw_tool_output_recorded",
|
|
752
|
+
"value": {
|
|
753
|
+
"boolValue": false
|
|
754
|
+
}
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"key": "privacy.raw_file_content_recorded",
|
|
758
|
+
"value": {
|
|
759
|
+
"boolValue": false
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
]
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"name": "context.prune.completed",
|
|
766
|
+
"timeUnixNano": "1779750249000000000",
|
|
767
|
+
"attributes": [
|
|
768
|
+
{
|
|
769
|
+
"key": "session.id",
|
|
770
|
+
"value": {
|
|
771
|
+
"stringValue": "claude-session-private-prune-fixture"
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
"key": "gen_ai.conversation.id",
|
|
776
|
+
"value": {
|
|
777
|
+
"stringValue": "conv-cozempic-receipt-demo"
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
{
|
|
781
|
+
"key": "context.prune.run_id_hash",
|
|
782
|
+
"value": {
|
|
783
|
+
"stringValue": "sha256:a3855bb5c010"
|
|
784
|
+
}
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
"key": "context.prune.status",
|
|
788
|
+
"value": {
|
|
789
|
+
"stringValue": "completed_with_backup"
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"key": "context.prune.token_count.after_bucket",
|
|
794
|
+
"value": {
|
|
795
|
+
"stringValue": "under_100k"
|
|
796
|
+
}
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
"key": "context.prune.byte_count.after_bucket",
|
|
800
|
+
"value": {
|
|
801
|
+
"stringValue": "under_10mb"
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
{
|
|
805
|
+
"key": "context.prune.token_count.removed_bucket",
|
|
806
|
+
"value": {
|
|
807
|
+
"stringValue": "under_100k"
|
|
808
|
+
}
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
"key": "context.prune.byte_count.removed_bucket",
|
|
812
|
+
"value": {
|
|
813
|
+
"stringValue": "under_10mb"
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
{
|
|
817
|
+
"key": "context.prune.end_ratio_bucket",
|
|
818
|
+
"value": {
|
|
819
|
+
"stringValue": "under_50_percent"
|
|
820
|
+
}
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"key": "context.prune.changed_item_count_bucket",
|
|
824
|
+
"value": {
|
|
825
|
+
"stringValue": "under_100"
|
|
826
|
+
}
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"key": "context.prune.protected_item_count_bucket",
|
|
830
|
+
"value": {
|
|
831
|
+
"stringValue": "under_25"
|
|
832
|
+
}
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
"key": "context.prune.backup.verified",
|
|
836
|
+
"value": {
|
|
837
|
+
"boolValue": true
|
|
838
|
+
}
|
|
839
|
+
},
|
|
840
|
+
{
|
|
841
|
+
"key": "context.prune.summary.hash",
|
|
842
|
+
"value": {
|
|
843
|
+
"stringValue": "sha256:e468aa06f5fd2bf91fb55dff0bfb7ab49e27282b12a9393a0754dff24530e1e0"
|
|
844
|
+
}
|
|
845
|
+
},
|
|
846
|
+
{
|
|
847
|
+
"key": "context.prune.audit_gap",
|
|
848
|
+
"value": {
|
|
849
|
+
"stringValue": "receipt proves pruning boundary and privacy posture, not semantic sufficiency of the remaining context"
|
|
850
|
+
}
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
"key": "privacy.raw_session_recorded",
|
|
854
|
+
"value": {
|
|
855
|
+
"boolValue": false
|
|
856
|
+
}
|
|
857
|
+
},
|
|
858
|
+
{
|
|
859
|
+
"key": "privacy.raw_summary_recorded",
|
|
860
|
+
"value": {
|
|
861
|
+
"boolValue": false
|
|
862
|
+
}
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"key": "privacy.raw_tool_output_recorded",
|
|
866
|
+
"value": {
|
|
867
|
+
"boolValue": false
|
|
868
|
+
}
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
"key": "privacy.raw_file_content_recorded",
|
|
872
|
+
"value": {
|
|
873
|
+
"boolValue": false
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
]
|
|
877
|
+
}
|
|
878
|
+
]
|
|
879
|
+
}
|
|
880
|
+
]
|
|
881
|
+
}
|
|
882
|
+
]
|
|
883
|
+
}
|
|
884
|
+
]
|
|
885
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{"trace_id":"9b0e4cae70987c85d72e866e2d3c6af0","span_id":"ddb3bc1e5eeda6ab","name":"context.prune.started","time":"2026-05-25T23:04:02.000Z","attributes":{"session.id":"claude-session-private-prune-fixture","gen_ai.conversation.id":"conv-cozempic-receipt-demo","agent.name":"claude-code","context.prune.run_id_hash":"sha256:a3855bb5c010","context.prune.tool":"cozempic-like-cleaner","context.prune.command_hash":"sha256:6e5b215f520cbcda7b87bf4a80618230b84f9fc400faaa398213033d8f1e828a","context.prune.prescription":"standard","context.prune.mode":"execute","context.prune.trigger":"guard_hard_threshold","context.prune.context_window_bucket":"over_100k","context.prune.token_count.before_bucket":"over_100k","context.prune.byte_count.before_bucket":"under_10mb","context.prune.start_ratio_bucket":"under_75_percent","context.prune.backup_id_hash":"sha256:2ae8b398160d","context.prune.backup.created":true,"context.prune.plan.hash":"sha256:76b5db8f0e5ac89df3c1162c9e28b0368e0462b6c189ac82244533041f3fcd6b","privacy.raw_session_recorded":false,"privacy.raw_plan_recorded":false,"privacy.raw_prompt_recorded":false,"privacy.raw_tool_output_recorded":false}}
|
|
2
|
+
{"trace_id":"9b0e4cae70987c85d72e866e2d3c6af0","span_id":"ddb3bc1e5eeda6ab","name":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:03.000Z","attributes":{"session.id":"claude-session-private-prune-fixture","gen_ai.conversation.id":"conv-cozempic-receipt-demo","context.prune.run_id_hash":"sha256:a3855bb5c010","context.prune.strategy":"compact-summary-collapse","context.prune.strategy.action":"protected","context.prune.strategy.candidate_count_bucket":"under_5","context.prune.strategy.changed_count_bucket":"zero","context.prune.strategy.protected_count_bucket":"under_5","context.prune.strategy.token_count.before_bucket":"under_50k","context.prune.strategy.token_count.removed_bucket":"under_1k","context.prune.strategy.byte_count.removed_bucket":"under_1kb","context.prune.strategy.reason_hash":"sha256:ec5620dcdf7780a61b178b0528e3586a72a01f70b17af35176b0a257ba166fc0","context.prune.strategy.sample_hash":"sha256:e6fa1ade672423349cf768a1e9f043aad95be0f501c964b21987971ebd1bc89a","context.prune.strategy.raw_text_recorded":false,"privacy.raw_session_recorded":false,"privacy.raw_tool_output_recorded":false,"privacy.raw_file_content_recorded":false}}
|
|
3
|
+
{"trace_id":"9b0e4cae70987c85d72e866e2d3c6af0","span_id":"ddb3bc1e5eeda6ab","name":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:04.000Z","attributes":{"session.id":"claude-session-private-prune-fixture","gen_ai.conversation.id":"conv-cozempic-receipt-demo","context.prune.run_id_hash":"sha256:a3855bb5c010","context.prune.strategy":"tool-output-trim","context.prune.strategy.action":"trimmed","context.prune.strategy.candidate_count_bucket":"under_25","context.prune.strategy.changed_count_bucket":"under_25","context.prune.strategy.protected_count_bucket":"under_5","context.prune.strategy.token_count.before_bucket":"under_50k","context.prune.strategy.token_count.removed_bucket":"under_50k","context.prune.strategy.byte_count.removed_bucket":"under_10mb","context.prune.strategy.reason_hash":"sha256:83c47780facad7b3b3490be8a372bca7ac820e0ab723f90599ca24f09763f0b0","context.prune.strategy.sample_hash":"sha256:c99730548cf4f54e4948cde0dd2ee61a0e7fe12d9f5a31cf7b39d4d5f86f0bf0","context.prune.strategy.raw_text_recorded":false,"privacy.raw_session_recorded":false,"privacy.raw_tool_output_recorded":false,"privacy.raw_file_content_recorded":false}}
|
|
4
|
+
{"trace_id":"9b0e4cae70987c85d72e866e2d3c6af0","span_id":"ddb3bc1e5eeda6ab","name":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:05.000Z","attributes":{"session.id":"claude-session-private-prune-fixture","gen_ai.conversation.id":"conv-cozempic-receipt-demo","context.prune.run_id_hash":"sha256:a3855bb5c010","context.prune.strategy":"tool-result-age","context.prune.strategy.action":"minified","context.prune.strategy.candidate_count_bucket":"under_25","context.prune.strategy.changed_count_bucket":"under_25","context.prune.strategy.protected_count_bucket":"under_5","context.prune.strategy.token_count.before_bucket":"under_50k","context.prune.strategy.token_count.removed_bucket":"under_50k","context.prune.strategy.byte_count.removed_bucket":"under_10mb","context.prune.strategy.reason_hash":"sha256:ead46a2482d65359b9848cdbc410a0132c0ef70dfd71be5832cd8332018e3829","context.prune.strategy.sample_hash":"sha256:a517b1809dfd0bbe03adef577f133150a729acd9e90409594e6ec21914c4a551","context.prune.strategy.raw_text_recorded":false,"privacy.raw_session_recorded":false,"privacy.raw_tool_output_recorded":false,"privacy.raw_file_content_recorded":false}}
|
|
5
|
+
{"trace_id":"9b0e4cae70987c85d72e866e2d3c6af0","span_id":"ddb3bc1e5eeda6ab","name":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:06.000Z","attributes":{"session.id":"claude-session-private-prune-fixture","gen_ai.conversation.id":"conv-cozempic-receipt-demo","context.prune.run_id_hash":"sha256:a3855bb5c010","context.prune.strategy":"document-dedup","context.prune.strategy.action":"deduped","context.prune.strategy.candidate_count_bucket":"under_25","context.prune.strategy.changed_count_bucket":"under_5","context.prune.strategy.protected_count_bucket":"zero","context.prune.strategy.token_count.before_bucket":"under_50k","context.prune.strategy.token_count.removed_bucket":"under_50k","context.prune.strategy.byte_count.removed_bucket":"under_1mb","context.prune.strategy.reason_hash":"sha256:cecb93bebe7b8d60542938693d6525dc5c5e3255e80e55b61dc3efdd2a9edf1c","context.prune.strategy.sample_hash":"sha256:edf3c3df1f1c430b9672833e7d736f387075f7ccd9815f72ca4c4ed46ea8fa2f","context.prune.strategy.raw_text_recorded":false,"privacy.raw_session_recorded":false,"privacy.raw_tool_output_recorded":false,"privacy.raw_file_content_recorded":false}}
|
|
6
|
+
{"trace_id":"9b0e4cae70987c85d72e866e2d3c6af0","span_id":"ddb3bc1e5eeda6ab","name":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:07.000Z","attributes":{"session.id":"claude-session-private-prune-fixture","gen_ai.conversation.id":"conv-cozempic-receipt-demo","context.prune.run_id_hash":"sha256:a3855bb5c010","context.prune.strategy":"behavioral-digest","context.prune.strategy.action":"protected","context.prune.strategy.candidate_count_bucket":"under_5","context.prune.strategy.changed_count_bucket":"zero","context.prune.strategy.protected_count_bucket":"under_5","context.prune.strategy.token_count.before_bucket":"under_10k","context.prune.strategy.token_count.removed_bucket":"under_1k","context.prune.strategy.byte_count.removed_bucket":"under_1kb","context.prune.strategy.reason_hash":"sha256:8a373baf84c1899e5a1d0a63888419a85d21950e482684aac3418f987d8481ff","context.prune.strategy.sample_hash":"sha256:a5a03cc5c544d0eef6ebe24466d4af1b9cf64dd0767aa1a45e17f3ad2b5cb661","context.prune.strategy.raw_text_recorded":false,"privacy.raw_session_recorded":false,"privacy.raw_tool_output_recorded":false,"privacy.raw_file_content_recorded":false}}
|
|
7
|
+
{"trace_id":"9b0e4cae70987c85d72e866e2d3c6af0","span_id":"ddb3bc1e5eeda6ab","name":"context.prune.completed","time":"2026-05-25T23:04:09.000Z","attributes":{"session.id":"claude-session-private-prune-fixture","gen_ai.conversation.id":"conv-cozempic-receipt-demo","context.prune.run_id_hash":"sha256:a3855bb5c010","context.prune.status":"completed_with_backup","context.prune.token_count.after_bucket":"under_100k","context.prune.byte_count.after_bucket":"under_10mb","context.prune.token_count.removed_bucket":"under_100k","context.prune.byte_count.removed_bucket":"under_10mb","context.prune.end_ratio_bucket":"under_50_percent","context.prune.changed_item_count_bucket":"under_100","context.prune.protected_item_count_bucket":"under_25","context.prune.backup.verified":true,"context.prune.summary.hash":"sha256:e468aa06f5fd2bf91fb55dff0bfb7ab49e27282b12a9393a0754dff24530e1e0","context.prune.audit_gap":"receipt proves pruning boundary and privacy posture, not semantic sufficiency of the remaining context","privacy.raw_session_recorded":false,"privacy.raw_summary_recorded":false,"privacy.raw_tool_output_recorded":false,"privacy.raw_file_content_recorded":false}}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{"type":"session.start","time":"2026-05-25T23:04:00.000Z","session_id":"claude-session-private-prune-fixture","conversation_id":"conv-cozempic-receipt-demo","agent":"claude-code","workspace":"private-support-monorepo","model":"claude-opus-4-1","raw_session_excerpt":"Acme-Co checkout escalation with private support transcript, token sk_live_private_fixture, screenshots, and internal runbook notes"}
|
|
2
|
+
{"type":"context.prune.start","time":"2026-05-25T23:04:02.000Z","run_id":"prune-run-2026-05-25-private","tool":"cozempic-like-cleaner","command":"treat current --rx standard --execute","prescription":"standard","mode":"execute","trigger":"guard_hard_threshold","context_window_tokens":200000,"token_count_before":142000,"byte_count_before":9437184,"backup_id":"backup-private-session-001","raw_plan_notes":"Trim stale support-ticket tool outputs and protect the compact summary about PAY-1234"}
|
|
3
|
+
{"type":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:03.000Z","strategy":"compact-summary-collapse","action":"protected","candidate_count":1,"changed_count":0,"token_count_before":36000,"token_count_removed":0,"byte_count_removed":0,"protected_count":1,"reason":"compact summary anchors current task","raw_sample":"Do not remove summary that mentions private order PAY-1234 and internal root cause notes"}
|
|
4
|
+
{"type":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:04.000Z","strategy":"tool-output-trim","action":"trimmed","candidate_count":12,"changed_count":9,"token_count_before":48000,"token_count_removed":31000,"byte_count_removed":1835008,"protected_count":1,"reason":"oversized stale tool outputs with newer summaries","raw_sample":"Huge private curl output with customer email finance@acme.example and auth header Bearer private_fixture"}
|
|
5
|
+
{"type":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:05.000Z","strategy":"tool-result-age","action":"minified","candidate_count":18,"changed_count":14,"token_count_before":41000,"token_count_removed":26000,"byte_count_removed":1212416,"protected_count":2,"reason":"old tool results superseded by later decisions","raw_sample":"Old payment log PAY-1234 showing customer-like card token and internal trace id"}
|
|
6
|
+
{"type":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:06.000Z","strategy":"document-dedup","action":"deduped","candidate_count":7,"changed_count":5,"token_count_before":22000,"token_count_removed":16000,"byte_count_removed":589824,"protected_count":0,"reason":"duplicate CLAUDE.md and runbook injections","raw_sample":"Private /workspace/acme/CLAUDE.md repeated guidance with internal deployment host"}
|
|
7
|
+
{"type":"context.prune.strategy.evaluated","time":"2026-05-25T23:04:07.000Z","strategy":"behavioral-digest","action":"protected","candidate_count":3,"changed_count":0,"token_count_before":4000,"token_count_removed":0,"byte_count_removed":0,"protected_count":3,"reason":"user corrections should survive compaction","raw_sample":"Always avoid editing production credentials in /private/work/acme"}
|
|
8
|
+
{"type":"context.prune.completed","time":"2026-05-25T23:04:09.000Z","status":"completed_with_backup","token_count_after":69000,"byte_count_after":3997696,"total_token_count_removed":73000,"total_byte_count_removed":5439488,"changed_item_count":28,"protected_item_count":7,"backup_verified":true,"audit_gap":"receipt proves pruning boundary and privacy posture, not semantic sufficiency of the remaining context","raw_summary":"Pruned stale private support outputs while preserving compact summary, behavioral digest, and active task state"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pluribus-context",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.31",
|
|
4
4
|
"description": "AI context and rules sync CLI for Claude.md, Claude Code, Cursor, and Copilot instructions, with privacy-safe context receipts that prove what memory, tools, skills, compactions, and security findings crossed agent boundaries without logging raw content.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/caioribeiroclw-pixel/pluribus#readme",
|
package/src/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.3.
|
|
1
|
+
export const VERSION = '0.3.31'
|