Skip to content

Commit 5c69448

Browse files
authored
Merge pull request #513 from manojmallick/develop
chore(release): v8.24.0 — Trust Quick Wins I
2 parents 71a12cb + 9eac0d1 commit 5c69448

31 files changed

Lines changed: 411 additions & 87 deletions

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ Format: [Semantic Versioning](https://semver.org/)
1010

1111
---
1212

13+
## [8.24.0] — 2026-07-28
14+
15+
Minor release — **"Trust Quick Wins I" (v8.24, G3a)**: the secret-redaction engine that already protects signatures, `get_lines`, and evidence packs becomes a standalone command for arbitrary text.
16+
17+
### Added
18+
- **`sigmap redact` (#511, PR #512):** new `src/security/redact.js``redactText()` masks only the matched secret substring (`[REDACTED:<pattern name>]`), preserving surrounding text (unlike the generation-time scanner's whole-line replacement, which is unchanged). Findings carry 1-based line numbers with per-pattern counts. CLI: `sigmap redact [file] [--json]` — file argument or stdin; redacted text on stdout (pipe-clean), summary on stderr. Reuses the existing 10-pattern bank verbatim; zero new dependencies; never throws. 6 new integration tests including an every-pattern mask sweep (130 test files).
19+
20+
### Changed
21+
- Test fixtures for secret patterns are assembled at runtime (no secret-shaped literals in committed blobs) — GitHub Push Protection rejected the first push over the fake samples, which validated the detection class this command implements.
22+
23+
---
24+
1325
## [8.23.0] — 2026-07-28
1426

1527
Minor release — **"Agent Economy I" (v8.23, F1)**: SigMap's token savings become queryable *during* a session. A spend ledger over the existing gain log, an optional budget threshold, and context-freshness age — as a CLI command and the 21st MCP tool.

CONTRIBUTORS.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ To ensure proper attribution:
3535

3636
We welcome contributions! See [Contributing](./docs/CONTRIBUTING.md) for guidelines.
3737

38+
### Recent Contributors (v8.24.0)
39+
- **@manojmallick** — feat(security): `sigmap redact` — standalone substring-level secret masking over files/stdin (10-pattern bank, pipe-clean stdout, `--json`); every-pattern test sweep (#511, PR #512)
40+
3841
### Recent Contributors (v8.23.0)
3942
- **@manojmallick** — feat(tracking,mcp): `sigmap budget` session spend ledger (estimated SigMap-emitted tokens, optional budget, context-age TTL) + `get_budget` MCP tool (21st); `SIGMAP_SESSION` identity; opt-in `sessionBudgetTokens`/`contextTtlDays` (#508, PR #509)
4043

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ Ask → Rank → Context → Validate → Judge → Learn
122122

123123
<!--SM:benchmarkBlock-->
124124
```
125-
Benchmark : sigmap-v8.23-main (21 repositories, including R language)
125+
Benchmark : sigmap-v8.24-main (21 repositories, including R language)
126126
Date : 2026-07-28
127127
128128
Hit@5 : 82.2% (grep-agent baseline 44.8% — 1.59× lift)

benchmarks/latest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"benchmark_id": "sigmap-v8.23-main",
2+
"benchmark_id": "sigmap-v8.24-main",
33
"benchmark_date": "2026-07-28",
44
"source": "benchmarks/reports/{benchmark-matrix,task-benchmark,token-reduction,honest-baseline}.json",
55
"repos_token": 21,

benchmarks/reports/benchmark-matrix.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"generated": "2026-07-28T19:29:15.129Z",
2+
"generated": "2026-07-28T21:53:53.739Z",
33
"success": true,
44
"steps": [
55
{
@@ -11,7 +11,7 @@
1111
],
1212
"status": 0,
1313
"ok": true,
14-
"durationMs": 31016,
14+
"durationMs": 16146,
1515
"stdoutTail": "n 34s | 10.6s | **19min 23s** | 1min 57s | 1.1s | **1min 56s** |\n| **serilog** | 1min 38s | 3.6s | **1min 34s** | 9.8s | 0.4s | **9.4s** |\n| **riverpod** | 6min 14s | 10.7s | **6min 3s** | 37.4s | 1.1s | **36.3s** |\n| **okhttp** | 15.6s | 0.9s | **14.8s** | 1.6s | <0.1s | **1.5s** |\n| **laravel** | 13min 60s | 9.4s | **13min 50s** | 1min 24s | 0.9s | **1min 23s** |\n| **akka** | 6min 35s | 5.8s | **6min 30s** | 39.5s | 0.6s | **39.0s** |\n| **vapor** | 1min 26s | 1.6s | **1min 24s** | 8.6s | 0.2s | **8.4s** |\n| **vue-core** | 3min 34s | 5.3s | **3min 29s** | 21.4s | 0.5s | **20.9s** |\n| **svelte** | 3min 39s | 10.9s | **3min 28s** | 21.9s | 1.1s | **20.8s** |\n| **fastify** | 27.2s | 1.6s | **25.6s** | 2.7s | 0.2s | **2.6s** |\n| **fastapi** | 1min 29s | 1.9s | **1min 27s** | 8.9s | 0.2s | **8.7s** |\n| **ggplot2** | 3min 11s | 9.5s | **3min 1s** | 19.1s | 0.9s | **18.1s** |\n| **dplyr** | 1min 13s | 4.2s | **1min 8s** | 7.3s | 0.4s | **6.8s** |\n| **shiny** | 2min 12s | 4.4s | **2min 8s** | 13.2s | 0.4s | **12.8s** |\n\n*At 10 calls/day per repo: **1hr 50min** saved across all repos per round · **18hr 25min/day** · **6,720 hr/year***\n\nReport saved → benchmarks/reports/token-reduction.json\n",
1616
"stderrTail": ""
1717
},
@@ -23,7 +23,7 @@
2323
],
2424
"status": 0,
2525
"ok": true,
26-
"durationMs": 19434,
26+
"durationMs": 14102,
2727
"stdoutTail": " 18 28% 100% 3.6× 5/5 0/5 0/5\nlaravel 1533 271 0% 100% 306.6× 4/5 1/5 0/5\nakka 211 108 2% 100% 42.2× 3/5 2/5 0/5\nvapor 131 58 4% 0% 0× 0/5 0/5 5/5\nvue-core 232 129 2% 100% 46.4× 4/5 1/5 0/5\nsvelte 370 141 1% 80% 59.2× 3/5 1/5 1/5\nfastify 31 28 16% 63% 3.9× 5/5 0/5 3/5\nfastapi 48 25 10% 80% 7.7× 3/5 1/5 1/5\n──────────────────────────────────────────────────────────────────────────────────────────\nAVERAGE 16.0% 81.9% 5.1× 68/105 18/105 19/105\n──────────────────────────────────────────────────────────────────────────────────────────\n\nMethodology:\n Random baseline = min(1, 5/fileCount) — probability of a random 5-file selection containing the target\n Correct = target file is rank-1 result\n Partial = target file in ranks 2–5\n Wrong = target file not in top-5\n No LLM API used. All scores are retrieval rank math.\n\n[saved] /Users/manojmallick/sigmap/benchmarks/reports/retrieval.json\n",
2828
"stderrTail": "[run] express ...\n[run] flask ...\n[run] gin ...\n[run] spring-petclinic ...\n[run] rails ...\n[run] axios ...\n[run] rust-analyzer ...\n[run] abseil-cpp ...\n[run] serilog ...\n[run] riverpod ...\n[run] okhttp ...\n[run] laravel ...\n[run] akka ...\n[run] vapor ...\n[run] vue-core ...\n[run] svelte ...\n[run] fastify ...\n[run] fastapi ...\n[skip] ggplot2: no task file\n[skip] dplyr: no task file\n[skip] shiny: no task file\n"
2929
},
@@ -35,7 +35,7 @@
3535
],
3636
"status": 0,
3737
"ok": true,
38-
"durationMs": 23134,
38+
"durationMs": 15118,
3939
"stdoutTail": "738 | **$22.15** |\n| **laravel** | $41.99 | $0.471 | $41.52 | **$1245.49** |\n| **akka** | $19.76 | $0.289 | $19.47 | **$584.25** |\n| **vapor** | $4.28 | $0.078 | $4.21 | **$126.19** |\n| **vue-core** | $10.69 | $0.263 | $10.43 | **$312.78** |\n| **svelte** | $10.95 | $0.547 | $10.41 | **$312.23** |\n| **fastify** | $1.36 | $0.081 | $1.28 | **$38.39** |\n| **fastapi** | $4.46 | $0.096 | $4.36 | **$130.90** |\n| **ggplot2** | $9.54 | $0.475 | $9.06 | **$271.85** |\n| **dplyr** | $3.63 | $0.210 | $3.42 | **$102.51** |\n| **shiny** | $6.62 | $0.219 | $6.40 | **$191.88** |\n\n*Total GPT-4o savings: ~$9941.94/month across 21 repos at 10 calls/day*\n\n### 5. API cost savings by model (10 calls/day)\n\n| Model | Input $/1M | Saved / day | Saved / month |\n|------|:----------:|:-----------:|:-------------:|\n| GPT-4o | $2.50 | $331.40 | **$9941.94** |\n| Claude Sonnet | $3.00 | $397.68 | **$11930.33** |\n| Claude Haiku | $1.00 | $132.56 | **$3976.78** |\n\n*Savings scale with each model's input rate — token reduction is model-agnostic; the dollar figure is not. Verified 2026-07 pricing: GPT-4o $2.50, Claude Sonnet $3.00, Claude Haiku $1.00 per 1M input tokens.*\n\nReport saved → benchmarks/reports/quality.json\n",
4040
"stderrTail": ""
4141
},
@@ -47,7 +47,7 @@
4747
],
4848
"status": 0,
4949
"ok": true,
50-
"durationMs": 159,
50+
"durationMs": 128,
5151
"stdoutTail": " flask 26.3% 88% 3.3×\n gin 4.7% 100% 21.3×\n spring-petclinic 38.5% 100% 2.6×\n rails 0.4% 100% 250.0×\n axios 20.0% 50% 2.5×\n rust-analyzer 0.8% 100% 125.0×\n abseil-cpp 0.7% 100% 142.9×\n serilog 5.1% 20% 3.9×\n riverpod 1.1% 100% 90.9×\n okhttp 27.8% 100% 3.6×\n laravel 0.3% 100% 333.3×\n akka 2.4% 100% 41.7×\n vapor 3.8% 0% 0.0×\n vue-core 2.2% 100% 45.5×\n svelte 1.4% 80% 57.1×\n fastify 16.1% 63% 3.9×\n fastapi 10.4% 80% 7.7×\n\n Hallucination risk proxy (dark symbols)\n\n Without SigMap: 85% of codebase symbols hidden from AI\n With SigMap: 15% of indexed symbols grounded in signatures\n (10,216 grounded, 57,187 dark — across 21 repos)\n\n──────────────────────────────────────────────────────────────────────────\n\n Report saved → benchmarks/reports/task-benchmark.json\n\n",
5252
"stderrTail": "[task-benchmark] saved → /Users/manojmallick/sigmap/benchmarks/reports/task-benchmark.json\n"
5353
}

benchmarks/reports/honest-baseline.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"generated": "2026-07-28T19:29:52.966Z",
2+
"generated": "2026-07-28T21:54:28.471Z",
33
"methodology": {
44
"corpus": "benchmarks/tasks/*.jsonl",
55
"scorer": "src/eval/scorer.js hitAtK/reciprocalRank, k=5",

benchmarks/reports/quality.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"version": "8.23.0",
3-
"timestamp": "2026-07-28T19:29:14.955Z",
2+
"version": "8.24.0",
3+
"timestamp": "2026-07-28T21:53:53.600Z",
44
"assumptions": {
55
"callsPerDay": 10,
66
"models": [

benchmarks/reports/retrieval.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"generated": "2026-07-28T19:28:51.814Z",
2+
"generated": "2026-07-28T21:53:38.481Z",
33
"repos": [
44
{
55
"repo": "express",

benchmarks/reports/task-benchmark.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"generated": "2026-07-28T19:29:15.085Z",
2+
"generated": "2026-07-28T21:53:53.711Z",
33
"methodology": {
44
"promptWeights": {
55
"correct": 1,

benchmarks/reports/token-reduction.json

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"version": "8.23.0",
3-
"timestamp": "2026-07-28T19:28:32.387Z",
2+
"version": "8.24.0",
3+
"timestamp": "2026-07-28T21:53:24.383Z",
44
"assumptions": {
55
"tokensPerSecUncached": 2000,
66
"cacheSpeedup": 10,
@@ -16,7 +16,7 @@
1616
"reductionPct": 98.1,
1717
"fileCount": 38,
1818
"droppedCount": 0,
19-
"timestamp": "2026-07-28T19:28:02.158Z",
19+
"timestamp": "2026-07-28T21:53:08.892Z",
2020
"timings": {
2121
"rawColdSec": 35.29,
2222
"sigColdSec": 0.66,
@@ -36,7 +36,7 @@
3636
"reductionPct": 96.1,
3737
"fileCount": 51,
3838
"droppedCount": 18,
39-
"timestamp": "2026-07-28T19:28:02.807Z",
39+
"timestamp": "2026-07-28T21:53:09.459Z",
4040
"timings": {
4141
"rawColdSec": 69.73,
4242
"sigColdSec": 2.7,
@@ -56,7 +56,7 @@
5656
"reductionPct": 95.1,
5757
"fileCount": 118,
5858
"droppedCount": 40,
59-
"timestamp": "2026-07-28T19:28:03.621Z",
59+
"timestamp": "2026-07-28T21:53:10.036Z",
6060
"timings": {
6161
"rawColdSec": 110.62,
6262
"sigColdSec": 5.45,
@@ -76,7 +76,7 @@
7676
"reductionPct": 96.8,
7777
"fileCount": 52,
7878
"droppedCount": 13,
79-
"timestamp": "2026-07-28T19:28:04.824Z",
79+
"timestamp": "2026-07-28T21:53:10.387Z",
8080
"timings": {
8181
"rawColdSec": 47.05,
8282
"sigColdSec": 1.52,
@@ -96,7 +96,7 @@
9696
"reductionPct": 98.7,
9797
"fileCount": 1193,
9898
"droppedCount": 918,
99-
"timestamp": "2026-07-28T19:28:06.490Z",
99+
"timestamp": "2026-07-28T21:53:11.162Z",
100100
"timings": {
101101
"rawColdSec": 749.53,
102102
"sigColdSec": 9.6,
@@ -116,7 +116,7 @@
116116
"reductionPct": 95.4,
117117
"fileCount": 64,
118118
"droppedCount": 14,
119-
"timestamp": "2026-07-28T19:28:08.332Z",
119+
"timestamp": "2026-07-28T21:53:11.659Z",
120120
"timings": {
121121
"rawColdSec": 36.16,
122122
"sigColdSec": 1.65,
@@ -136,7 +136,7 @@
136136
"reductionPct": 99.4,
137137
"fileCount": 675,
138138
"droppedCount": 513,
139-
"timestamp": "2026-07-28T19:28:17.424Z",
139+
"timestamp": "2026-07-28T21:53:15.719Z",
140140
"timings": {
141141
"rawColdSec": 1765.57,
142142
"sigColdSec": 10.46,
@@ -156,7 +156,7 @@
156156
"reductionPct": 99.1,
157157
"fileCount": 703,
158158
"droppedCount": 556,
159-
"timestamp": "2026-07-28T19:28:19.654Z",
159+
"timestamp": "2026-07-28T21:53:16.680Z",
160160
"timings": {
161161
"rawColdSec": 1173.76,
162162
"sigColdSec": 10.61,
@@ -176,7 +176,7 @@
176176
"reductionPct": 96.4,
177177
"fileCount": 195,
178178
"droppedCount": 117,
179-
"timestamp": "2026-07-28T19:28:21.254Z",
179+
"timestamp": "2026-07-28T21:53:17.200Z",
180180
"timings": {
181181
"rawColdSec": 97.76,
182182
"sigColdSec": 3.56,
@@ -196,7 +196,7 @@
196196
"reductionPct": 97.1,
197197
"fileCount": 465,
198198
"droppedCount": 350,
199-
"timestamp": "2026-07-28T19:28:23.017Z",
199+
"timestamp": "2026-07-28T21:53:17.978Z",
200200
"timings": {
201201
"rawColdSec": 373.61,
202202
"sigColdSec": 10.65,
@@ -216,7 +216,7 @@
216216
"reductionPct": 94.4,
217217
"fileCount": 18,
218218
"droppedCount": 0,
219-
"timestamp": "2026-07-28T19:28:23.953Z",
219+
"timestamp": "2026-07-28T21:53:18.352Z",
220220
"timings": {
221221
"rawColdSec": 15.64,
222222
"sigColdSec": 0.87,
@@ -236,7 +236,7 @@
236236
"reductionPct": 98.9,
237237
"fileCount": 1536,
238238
"droppedCount": 1265,
239-
"timestamp": "2026-07-28T19:28:25.785Z",
239+
"timestamp": "2026-07-28T21:53:19.260Z",
240240
"timings": {
241241
"rawColdSec": 839.75,
242242
"sigColdSec": 9.42,
@@ -256,7 +256,7 @@
256256
"reductionPct": 98.5,
257257
"fileCount": 211,
258258
"droppedCount": 103,
259-
"timestamp": "2026-07-28T19:28:26.651Z",
259+
"timestamp": "2026-07-28T21:53:19.948Z",
260260
"timings": {
261261
"rawColdSec": 395.27,
262262
"sigColdSec": 5.78,
@@ -276,7 +276,7 @@
276276
"reductionPct": 98.2,
277277
"fileCount": 134,
278278
"droppedCount": 76,
279-
"timestamp": "2026-07-28T19:28:27.412Z",
279+
"timestamp": "2026-07-28T21:53:20.400Z",
280280
"timings": {
281281
"rawColdSec": 85.68,
282282
"sigColdSec": 1.56,
@@ -296,7 +296,7 @@
296296
"reductionPct": 97.5,
297297
"fileCount": 249,
298298
"droppedCount": 120,
299-
"timestamp": "2026-07-28T19:28:28.148Z",
299+
"timestamp": "2026-07-28T21:53:21.020Z",
300300
"timings": {
301301
"rawColdSec": 213.77,
302302
"sigColdSec": 5.25,
@@ -316,7 +316,7 @@
316316
"reductionPct": 95,
317317
"fileCount": 370,
318318
"droppedCount": 229,
319-
"timestamp": "2026-07-28T19:28:29.396Z",
319+
"timestamp": "2026-07-28T21:53:22.099Z",
320320
"timings": {
321321
"rawColdSec": 219.09,
322322
"sigColdSec": 10.94,
@@ -336,7 +336,7 @@
336336
"reductionPct": 94.1,
337337
"fileCount": 28,
338338
"droppedCount": 0,
339-
"timestamp": "2026-07-28T19:28:29.846Z",
339+
"timestamp": "2026-07-28T21:53:22.500Z",
340340
"timings": {
341341
"rawColdSec": 27.21,
342342
"sigColdSec": 1.62,
@@ -356,7 +356,7 @@
356356
"reductionPct": 97.8,
357357
"fileCount": 32,
358358
"droppedCount": 7,
359-
"timestamp": "2026-07-28T19:28:30.534Z",
359+
"timestamp": "2026-07-28T21:53:22.959Z",
360360
"timings": {
361361
"rawColdSec": 89.19,
362362
"sigColdSec": 1.93,
@@ -376,7 +376,7 @@
376376
"reductionPct": 95,
377377
"fileCount": 189,
378378
"droppedCount": 75,
379-
"timestamp": "2026-07-28T19:28:31.229Z",
379+
"timestamp": "2026-07-28T21:53:23.486Z",
380380
"timings": {
381381
"rawColdSec": 190.73,
382382
"sigColdSec": 9.5,
@@ -396,7 +396,7 @@
396396
"reductionPct": 94.2,
397397
"fileCount": 97,
398398
"droppedCount": 38,
399-
"timestamp": "2026-07-28T19:28:31.701Z",
399+
"timestamp": "2026-07-28T21:53:23.909Z",
400400
"timings": {
401401
"rawColdSec": 72.54,
402402
"sigColdSec": 4.2,
@@ -416,7 +416,7 @@
416416
"reductionPct": 96.7,
417417
"fileCount": 93,
418418
"droppedCount": 39,
419-
"timestamp": "2026-07-28T19:28:32.343Z",
419+
"timestamp": "2026-07-28T21:53:24.348Z",
420420
"timings": {
421421
"rawColdSec": 132.3,
422422
"sigColdSec": 4.38,

0 commit comments

Comments
 (0)