Skip to content

CodeEraser 1.3.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 15:23
· 108 commits to main since this release

CodeEraser 1.3.0

Highlights

  • ce update — a self-update on every face. The check reads the latest release tag and that tag's committed plugin/bin/manifest.env; the verdict is the exit code (0 current / 1 available / 2 unknown — no network is never read as "current"). ce update --yes downloads ce and ce-core, verifies both SHA-256 pins, then places them by rename (--installer also saves the verified GUI installer and prints its path). A copy the plugin bound is re-pinned by /plugin update codeeraser; a cargo install by cargo install codeeraser. GUI: new Update screen. Plugin: SessionStart announces a newer release once a day (CE_UPDATE_CHECK=0 turns it off), /codeeraser:update runs the check, MCP update_check only checks. Report schema ce.update-report/0.1.0.
  • Three faces, one product — gated. A capability × face table (CLI / GUI / plugin) is derived from clap's enum, the Tauri handler roster and tab strip, the MCP catalog, hooks.json and the plugin's commands and skills; every shipped face must be claimed by a row and every claim must ship. The table is embedded in both READMEs.
  • README rewritten in both languages (English README.md, Chinese README.zh.md) around one structure: what it is, functions and scope, how it works, before/after on a real in-repo demo (demo/ — the same seven-step task run twice, only the hook differs; outputs are byte-gated), benchmark dashboard, install/run/update, tech stack and philosophy, roadmap and limits.
  • Symbol-layer advisory (ADR-008 step 3b). ce deadcode reports unmentioned declarations (public / private / restricted / re-exported) as an advisory beside the liveness verdicts, computed from a mention universe of every file git sees; ce graph --mentions prints the universe and rates. Wire graph/1 grew additively to 6.4.0 (unmentioned/mounts tables, foreign-owner role bit, knobs fence); ce.deadcode-report 0.3.0; ce.mentions-report 0.2.0.
  • Tests moved to a public submoduleskymanbp/CodeEraser-tests mounted at cli/tests, with its own gates. Foreign-owned files are read but never judged (files.owner, role bit 7).
  • Documentation facts are derived, not typed. One registry in the test suite resolves every fact that moves with a version — versions, schema ids, counts and their spelled-out number words, gate figures — and four renderers place it: inline chips on nineteen surfaces, generated blocks, derived tables, and citation labels. contracts/docs-facts.json is the projection, byte-verified in CI; CE_BLESS=1 rewrites it locally and CI refuses the flag. Citations now key on the anchor's text rather than a line number, so an edit above a cited line re-renders the label instead of silently rotting it.
  • Two architecture diagrams, one per language, rendered from committed JSON IR by a pinned archify. The SVGs under docs/assets and site/assets are byte-identical twins and regenerate deterministically under a gate.
  • The hooks refuse in the reader's language. Every sentence the PreToolUse guard speaks — duplicate content, over budget, the graded zone, and the three notes beside them — now goes through the i18n table, so CE_LANG=zh no longer answers a Chinese session in English. The English wording is byte-for-byte what it was, so FPR replay is unaffected.
  • Two measured exhibits in the READMEs, replayed at build time on a scratch tree: a copied helper refused at the moment of writing, and one [[rules.class]] line read by two mouths (the guard refuses the write, ce scan reports the same threshold). The site's homepage terminal block is likewise generated from a real run rather than typed.

Score comparability

The repository's own score is not comparable with 1.2.0: test files left the judged tree for the submodule (step #12), and the mention universe, secrets exclusions and ce:allow grammar changed the judged population. No default guard tier changed; FPR replay stands at the 1.2.0 figures.

Latency

The whole series was re-measured in one sitting for this release — all fifteen
tags, each built and measured from its own worktree on one machine state, so
version-over-version is finally a like-for-like comparison. The replay landed
after this tag was cut, so it is on main, not on v1.3.0:
docs/BENCH.md.

Against 1.2.0, one metric moved for a reason in the code: deadcode_warm
413 → 923 ms p50
, because ce deadcode now also computes the
unmentioned-declaration advisory. On one warm index, ce graph costs 26 ms,
ce graph --mentions 811 ms and ce deadcode 947 ms — the mention pass is
almost all of it. That pass reads every file in the universe and hashes its
bytes on every run (content hash, not mtime), which is what makes it correct
and what makes it cost a second read of the tree.

The other movements are not the code. Running 1.3.0's binaries over 1.2.0's own
tree leaves scan, dedup_cold, dedup_warm, docdup_warm and check_warm
flat or faster than 1.2.0's binaries on that same tree; what changed is the tree
— the indexed population went from 361 to 542 files (the tests submodule is
indexed though never judged, and the release added demo/, the booklets and the
split-out unit tests). Read across the whole series, docdup_warm 801 ms sits
with 1.0.0's 777 and 1.1.0's 787 on a tree half again as large, dedup_warm
381 ms stays well under 1.1.0's 494, and scan is faster than 1.2.0.

One caveat the series now states itself, and it is checkable from the
repository: 1.2.0's row was first taken on 2026-08-26; replaying that same
tag four days later — its own tree, its own binaries — moved all seven of its
metrics, from 11 % faster to 12 % slower, five of them faster. A
cross-version delta of roughly a tenth or less is below this instrument's
resolution, which is why the series is replayed whole rather than appended
to.

Upgrade notes

  • A non-default ce.toml trips knobs_digest on the first run after upgrading (the baseline fingerprint covers the whole parsed config): re-establish by name with CE_ACCEPT_BASELINE=1 ce baseline <root>.
  • Index schema is rebuilt automatically (v15); the graph store re-derives (GRAPH_REV 15).
  • ce update exists from this release on; a 1.2.0 install upgrades by the usual channel once, then self-updates.
  • Wire: ce↔core 6.4.0, daemon 2.0.0. The hello reply echoes 1.3.0.

Assets

Nine platform binaries and installers plus SHA256SUMS, all built by the release workflow's three-OS matrix (nothing is built locally). Binaries are unsigned; the SHA-256 chain — SHA256SUMS, the manifest pins committed before the tag, and ce update's verification — is the trust anchor.

Also on crates.io (cargo install codeeraser), npm (name-reservation pointer), and codeeraser.dev.