sigmap 5.8.0 → 5.9.0

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 CHANGED
@@ -10,6 +10,23 @@ Format: [Semantic Versioning](https://semver.org/)
10
10
 
11
11
  ---
12
12
 
13
+ ## [5.9.0] — 2026-04-18
14
+
15
+ ### Added
16
+
17
+ - **`sigmap bench --submit`** — new CLI command that reads `version.json` + local `.context/benchmark-history.ndjson` and formats a shareable community benchmark submission block (text and `--json`).
18
+ - **`scripts/verify-checksums.mjs`** — new standalone script to verify a downloaded binary against its `.sha256` checksum file; exits 0 on match, 1 on mismatch.
19
+ - **SHA-256 checksum generation in `build-binary.mjs`** — each binary build now writes a matching `dist/<artifact>.sha256` file automatically.
20
+ - **22 integration tests** in `test/integration/v590-binary-polish.test.js` covering all acceptance criteria.
21
+
22
+ ### Changed
23
+
24
+ - **`scripts/verify-binary.mjs`** — extended smoke tests with 5 new checks (tests 6–10): `ask`, `weights`, `history`, `bench --submit`, and `bench --submit --json`.
25
+ - **`version.json`** — bumped to `5.9.0`, `benchmark_id` updated to `sigmap-v5.9-main`.
26
+ - **`test/integration/v580-trust-completion.test.js`** — version assertion relaxed from exact `5.8.0` to `>= 5.8.0` so future releases don't break the test.
27
+
28
+ ---
29
+
13
30
  ## [5.8.0] — 2026-04-18
14
31
 
15
32
  ### Added
package/README.md CHANGED
@@ -25,13 +25,13 @@ npx sigmap # 10 seconds. zero config. your AI never reads the wrong file again
25
25
  - Fewer retries (1.68 vs 2.84 prompts per task)
26
26
  - Far smaller context (~2K–4K tokens instead of ~80K)
27
27
 
28
- > Latest: **v5.7.0** — Growth & Positioning. Canonical `version.json`, README rewrite, language count corrected to 29 everywhere, softwareVersion updated, stale metrics replaced with official v5.7 snapshot.
28
+ > Latest: **v5.9.0** — Binary Polish & Community Benchmarks. SHA-256 checksum generation for binaries, `sigmap bench --submit` for community benchmark sharing, extended binary smoke tests covering the full v5.x workflow.
29
29
 
30
- **What's new in v5.7**
31
- - Canonical `version.json`single source of truth for version, metrics, language count
32
- - README and all docs updated to official v5.7 benchmark snapshot
33
- - All surfaces now say `29 languages and formats` (corrected from 21)
34
- - 30-second quickstart and proof strip added to README
30
+ **What's new in v5.9**
31
+ - `sigmap bench --submit` — formats local benchmark history as a shareable community block (text and `--json`)
32
+ - Binary builds now write a `.sha256` checksum file alongside each artifact
33
+ - `scripts/verify-checksums.mjs` verify any downloaded binary against its checksum
34
+ - Extended `verify-binary.mjs` smoke tests: `ask`, `weights`, `history`, `bench --submit`
35
35
 
36
36
  **Daily workflow**
37
37
 
package/gen-context.js CHANGED
@@ -5291,7 +5291,7 @@ __factories["./src/mcp/server"] = function(module, exports) {
5291
5291
 
5292
5292
  const SERVER_INFO = {
5293
5293
  name: 'sigmap',
5294
- version: '5.8.0',
5294
+ version: '5.9.0',
5295
5295
  description: 'SigMap MCP server — code signatures on demand',
5296
5296
  };
5297
5297
 
@@ -7009,7 +7009,7 @@ const path = require('path');
7009
7009
  const os = require('os');
7010
7010
  const { execSync } = require('child_process');
7011
7011
 
7012
- const VERSION = '5.8.0';
7012
+ const VERSION = '5.9.0';
7013
7013
  const MARKER = '\n\n## Auto-generated signatures\n<!-- Updated by gen-context.js -->\n';
7014
7014
 
7015
7015
  function requireSourceOrBundled(key) {
@@ -9081,6 +9081,74 @@ function main() {
9081
9081
  process.exit(0);
9082
9082
  }
9083
9083
 
9084
+ // v5.9: `sigmap bench --submit` — format local benchmark history as a shareable community block
9085
+ if (args[0] === 'bench' && args.includes('--submit')) {
9086
+ const versionMeta = (() => {
9087
+ try { return JSON.parse(fs.readFileSync(path.join(__dirname, 'version.json'), 'utf8')); }
9088
+ catch (_) { return {}; }
9089
+ })();
9090
+
9091
+ const histPath = path.join(cwd, '.context', 'benchmark-history.ndjson');
9092
+ let localMetrics = null;
9093
+ if (fs.existsSync(histPath)) {
9094
+ try {
9095
+ const entries = fs.readFileSync(histPath, 'utf8').trim().split('\n')
9096
+ .map((l) => { try { return JSON.parse(l); } catch (_) { return null; } }).filter(Boolean);
9097
+ const ret = [...entries].reverse().find((e) => e.type === 'retrieval');
9098
+ const tok = [...entries].reverse().find((e) => e.type === 'token-reduction');
9099
+ if (ret || tok) {
9100
+ localMetrics = {
9101
+ hitAt5Pct: ret ? (ret.hitAt5Pct || Math.round((ret.hitAt5 || 0) * 100)) : null,
9102
+ reductionPct: tok ? (tok.reduction || tok.avgReductionPct || null) : null,
9103
+ runDate: (ret || tok).ts ? new Date((ret || tok).ts).toISOString().slice(0, 10) : null,
9104
+ };
9105
+ }
9106
+ } catch (_) {}
9107
+ }
9108
+
9109
+ const canonical = versionMeta.metrics || {};
9110
+ const submission = {
9111
+ sigmapVersion: versionMeta.version || 'unknown',
9112
+ benchmarkId: versionMeta.benchmark_id || 'unknown',
9113
+ canonicalHitAt5: canonical.hit_at_5 != null ? Math.round(canonical.hit_at_5 * 1000) / 10 : null,
9114
+ canonicalReduction: canonical.overall_token_reduction_pct || null,
9115
+ local: localMetrics,
9116
+ submittedAt: new Date().toISOString().slice(0, 10),
9117
+ };
9118
+
9119
+ if (args.includes('--json')) {
9120
+ process.stdout.write(JSON.stringify(submission, null, 2) + '\n');
9121
+ } else {
9122
+ const bar = '─'.repeat(56);
9123
+ const lines = [
9124
+ bar,
9125
+ ' SigMap Community Benchmark Submission',
9126
+ bar,
9127
+ ` SigMap version : ${submission.sigmapVersion}`,
9128
+ ` Benchmark ID : ${submission.benchmarkId}`,
9129
+ ` Submitted : ${submission.submittedAt}`,
9130
+ bar,
9131
+ ' Canonical metrics (official release):',
9132
+ ` hit@5 : ${submission.canonicalHitAt5 != null ? submission.canonicalHitAt5 + '%' : 'n/a'}`,
9133
+ ` token reduction: ${submission.canonicalReduction != null ? submission.canonicalReduction + '%' : 'n/a'}`,
9134
+ ];
9135
+ if (localMetrics) {
9136
+ lines.push(bar, ' Local run metrics (this repo):');
9137
+ if (localMetrics.hitAt5Pct != null) lines.push(` hit@5 : ${localMetrics.hitAt5Pct}%`);
9138
+ if (localMetrics.reductionPct != null) lines.push(` token reduction: ${localMetrics.reductionPct}%`);
9139
+ if (localMetrics.runDate) lines.push(` run date : ${localMetrics.runDate}`);
9140
+ } else {
9141
+ lines.push(bar, ' Local run metrics: none yet — run node scripts/run-retrieval-benchmark.mjs');
9142
+ }
9143
+ lines.push(bar);
9144
+ lines.push(' Paste the block above into a GitHub Discussion to share your results.');
9145
+ lines.push(' https://github.com/manojmallick/sigmap/discussions');
9146
+ lines.push(bar);
9147
+ console.log(lines.join('\n'));
9148
+ }
9149
+ process.exit(0);
9150
+ }
9151
+
9084
9152
  // v5.2: `sigmap learn` — manual learning controls for ranking
9085
9153
  if (args[0] === 'learn') {
9086
9154
  const doReset = args.includes('--reset');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigmap",
3
- "version": "5.8.0",
3
+ "version": "5.9.0",
4
4
  "description": "Zero-dependency AI context engine — 97% token reduction. No npm install. Runs on Node 18+.",
5
5
  "main": "gen-context.js",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigmap-cli",
3
- "version": "5.8.0",
3
+ "version": "5.9.0",
4
4
  "description": "SigMap CLI wrapper — thin adapter for programmatic CLI invocation",
5
5
  "main": "index.js",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigmap-core",
3
- "version": "5.8.0",
3
+ "version": "5.9.0",
4
4
  "description": "SigMap core library — zero-dependency code signature extraction, retrieval, and security scanning",
5
5
  "main": "index.js",
6
6
  "keywords": [
package/src/mcp/server.js CHANGED
@@ -18,7 +18,7 @@ const { readContext, searchSignatures, getMap, createCheckpoint, getRouting, exp
18
18
 
19
19
  const SERVER_INFO = {
20
20
  name: 'sigmap',
21
- version: '5.8.0',
21
+ version: '5.9.0',
22
22
  description: 'SigMap MCP server — code signatures on demand',
23
23
  };
24
24