CodeEraser 1.3.0
CodeEraser 1.3.0
Highlights
ce update— a self-update on every face. The check reads the latest release tag and that tag's committedplugin/bin/manifest.env; the verdict is the exit code (0 current / 1 available / 2 unknown — no network is never read as "current").ce update --yesdownloadsceandce-core, verifies both SHA-256 pins, then places them by rename (--installeralso saves the verified GUI installer and prints its path). A copy the plugin bound is re-pinned by/plugin update codeeraser; a cargo install bycargo install codeeraser. GUI: new Update screen. Plugin: SessionStart announces a newer release once a day (CE_UPDATE_CHECK=0turns it off),/codeeraser:updateruns the check, MCPupdate_checkonly checks. Report schemace.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, ChineseREADME.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 deadcodereports 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 --mentionsprints the universe and rates. Wire graph/1 grew additively to 6.4.0 (unmentioned/mounts tables, foreign-owner role bit, knobs fence);ce.deadcode-report0.3.0;ce.mentions-report0.2.0. - Tests moved to a public submodule — skymanbp/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.jsonis the projection, byte-verified in CI;CE_BLESS=1rewrites 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/assetsandsite/assetsare 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=zhno 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 scanreports 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.tomltripsknobs_digeston the first run after upgrading (the baseline fingerprint covers the whole parsed config): re-establish by name withCE_ACCEPT_BASELINE=1 ce baseline <root>. - Index schema is rebuilt automatically (v15); the graph store re-derives (
GRAPH_REV15). ce updateexists 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
helloreply 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.