chore: tell the truth about what installs today, and clear scratch out of the repo root - #90
Merged
Merged
Conversation
…t of the repo root The public surface is a release behind what main can do, and the root listing — the first thing a visitor to a public repo reads — ships build scratch. Honesty about the release: - `npm i -g aether-agents`, the README's first code block, resolves to 0.1.0. The registry's latest dist-tag is 0.1.0 and 0.1.0 is the only published version, while main has been 0.2.0 since 2026-08-19. Every documented 0.2.0 feature is unreachable to anyone who installs the way the README says. The README now states plainly that the command gives you 0.1.0, which features are therefore absent, and how to build from source meanwhile. - RELEASE_NOTES.md led with August 14 while the v0.2.0 / August 19 entry sat below it, so the file read as if it topped out a release early. The entries are now newest-first like the rest of the log, and the v0.2.0 entry carries an Availability note instead of an unqualified "upgrade with npm i -g", which today upgrades you to nothing. - install.sh advertised AETHER_VERSION=0.2.0 as a way to pin an exact release. That version is not on the registry, so following the comment fails. The comment now says PUBLISHED release with a published example, and a failed pinned install explains "No matching version found" instead of only offering EACCES advice. Publishing 0.2.0 itself is owner-gated and is NOT part of this change: it needs the npm-production environment, an NPM_TOKEN, a v0.2.0 tag and a GitHub release. Repo hygiene (none of this ever reached npm — the package files allowlist is dist/src plus four docs, and verify-production enforces it, so this is storefront cleanup, not a package defect): - Deleted aether-agents-0.2.0.tgz, a 576 KB committed npm tarball of a version that was never published, and added *.tgz to .gitignore so npm pack output cannot be committed again. - Deleted commands.jsx (21 KB), a browser React component depending on window globals. Nothing in the build, the tests, or any config references it, and the package has no React dependency. - Moved _loopstate/ to docs/loops/ — 87 tracked files of internal agent-run audit dumps. They are deliberately kept, not dropped: a design spec cites them as its evidence trail. Moving them keeps that trail intact while taking the scratch out of the root listing. The citing spec's path reference is updated. Also: src/generated/agent_capabilities.ts told contributors to regenerate it with "node scratchpad gen_fallback.mjs". No such file exists anywhere in the tree, so a generated file was effectively unregenerable by anyone outside. Replaced with the actual procedure, including the canonical sorted-keys sha256 recipe, which was verified to reproduce the declared digest exactly. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The defect
Two things, both about what this repository tells the public.
1. The install instructions do not give you the software they describe
The README's very first code block — and
install.sh's defaultAETHER_VERSION=latest— resolve to 0.1.0:mainhas been at 0.2.0 since 2026-08-19. So every feature documented under v0.2.0 — portable handoffs,--resumereaching the brain,aether agent --local "<task>"working straight after an install instead of dying onspawn python ENOENT— is unreachable to anyone who installs the way the README says. They install 0.1.0, read release notes describing 0.2.0, and have no way to tell which one they have.Supporting facts, all checked rather than assumed:
v0.1.0andfrozen-seam-v1(git ls-remote --tags). There is nov0.2.0.gh release listis empty. No GitHub release has ever been created, which meansrelease.yml— the entire publish rail — has never fired once.RELEASE_NOTES.md, linked from the README's badge, led with August 14, 2026 while the v0.2.0 / August 19 entry sat below it. The content was present but mis-ordered, so the file read as though it stopped a release early.install.shtold users toAETHER_VERSION=0.2.0to "pin an exact release". That version is not on the registry, so anyone following that comment getsNo matching version found— the installer only offered EACCES advice in response.2. The root listing — the storefront of a public repo — shipped scratch
aether-agents-0.2.0.tgz(576 KB, a committed npm tarball of the version that was never published), a straycommands.jsx(21 KB) that no build references, and_loopstate/**(87 files of internal agent-run audit dumps) sat in the root..gitignorecovereddist/,_tmp/and.hermes/, and none of these.This is repo hygiene, not a package defect, and I want to be precise about that: none of it ever reached npm.
package.json'sfilesallowlist isdist/srcplus four docs, andscripts/verify-production.tsenforces it. The cost is to an outside contributor reading the root listing, not to anyone installing the package.Separately,
src/generated/agent_capabilities.tstold contributors to regenerate it withnode scratchpad gen_fallback.mjsand pointed at "docs/releases/skills-health notes". Neither exists anywhere in the tree — so a generated file was effectively unregenerable by anyone outside the original author's machine.This PR makes the docs honest about the gap. It cannot close the gap. Cutting the 0.2.0 release is owner-gated:
gh secret listshows zero repo secrets, and the only environment that exists isgithub-pages. The following require repository-owner credentials and remain outstanding after this merges:npm-productionenvironment.NPM_TOKENsecret with publish rights toaether-agents.v0.2.0and cut the GitHub release that triggersrelease.yml.latestdist-tag moves to 0.2.0.Everything up to that credential gate is green and was verified on this branch:
When 0.2.0 is actually published, the honesty notes this PR adds should be removed — the README block, and the Availability paragraph in the v0.2.0 release-notes entry. They are deliberately worded to be easy to find and delete.
What changed
README.md— a short block under the beta line states thatnpm i -ggives you 0.1.0 today, names the 0.2.0 features that are therefore absent, and gives the build-from-source path. The installer paragraph no longer advertises pinning to an unpublished version, and says what pinning to one does.RELEASE_NOTES.md— the v0.2.0 / August 19 entry is moved above the August 14 entry, so the log is newest-first throughout. Its closing "Upgrade withnpm i -g aether-agents" (which today upgrades you to nothing) is replaced by an Availability paragraph stating that 0.2.0 is onmainbut not on npm, with the source build, and what will be true once it is published. No release-note prose was rewritten.install.sh— the pin comment says published release and uses a published example. A failed pinned install now explainsNo matching version found, points atnpm view aether-agents versions, and mentions the source build, before the existing EACCES advice..gitignore— adds*.tgz, sonpm packoutput cannot be committed again.Deleted:
aether-agents-0.2.0.tgz— 576 KB npm tarball of the unpublished version. Nothing references it.commands.jsx— 504 lines of browser React (/* global React, ReactDOM, ... */, JSX,navigator.clipboard) for a marketing command-card UI. No bundler, no build step, no test, and no config references it, and the package has no React dependency.grep -rn "commands.jsx"across the repo returns nothing.Moved, not deleted —
_loopstate/→docs/loops/(87 files): these are internal agent-run audit dumps, and I read them before touching them. They aregovernance-ledger.md(a verdict table: run id, retries, debate rounds, tool-success %, hallucinations caught, confidence) plus six loop directories:LOOP-01/sc-a0-2026-08-19BLOCKED-PENDING-IMPLEMENTATIONLOOP-07/2026-07-20T13-53-25-0400LOOP-11/2026-07-20T14-04-43-0400LOOP-12/2026-07-20T14-12-13-0400LOOP-13/2026-07-20T14-19-07-0400LOOP-17/2026-07-20T13-58-39-0400I did not delete them, because
docs/specs/2026-07-20-devops-production-hardening-design.md:59cites them by path as that spec's evidence trail — deleting them would have silently broken a documented audit trail in a public repo. Moving them underdocs/keeps the trail intact and takes the scratch out of the root listing. All 87 are staged as renames (git statusshowsR, zero content change), and the citing spec's path reference is updated in the same commit.src/generated/agent_capabilities.ts— header comment only. The phantomgen_fallback.mjsline is replaced with the actual four-step procedure, including the canonical digest recipe: sha256 over the JSON with object keys sorted recursively and no whitespace. I verified that recipe reproduces the declared digest rather than describing it from the variable name:What I deliberately did not touch
README.md, Models & pricing). A scout note flagged it as possibly stale on the grounds that "Claude Opus 4.8" corresponds to no real Claude family. That reasoning is wrong — Opus 4.8 is real — and I did not act on it. More importantly, the table describes AETHER-CLOUD's hosted fleet, which cannot be queried from here without credentials. Editing it on a guess would make the README less accurate, not more. It still needs a cross-check against the liveGET /modelscatalog by someone with credentials; that is a genuine open item, just not one that can be closed from an unauthenticated checkout.src/core/tool_executor.ts,src/core/git_commit_guard.ts,src/core/brain_cloud.ts,src/commands/**— a sibling lane owns those.scripts/verify-production.ts— its pack guard regex still names_loopstaterather thandocs/loops. Harmless (thefilesallowlist already excludes both, and the stale name still guards against the directory reappearing at the root), but worth a one-line follow-up by whoever owns that script. Out of this lane.Test evidence
The suite was run with
TEMP/TMP/TMPDIRpointed at a directory outside any git repository, because the worktree tests otherwise interact badly with a temp directory inside a checkout on this machine. Environment workaround, no test changes.packedBytesis 2410189 against a 2408615 baseline: +1574 bytes, which is the expanded regeneration comment insrc/generated/agent_capabilities.ts, sincedist/srcis inside the packed allowlist andtscpreserves comments.packedFilesis unchanged at 524 — no file entered or left the tarball.Blast radius
No behavior change of any kind. Documentation prose, one shell comment plus one extra shell error-hint branch that runs only on an already-failed install, a
.gitignoreline, one TypeScript comment, and file moves/deletions of assets that nothing in the build, tests, or package references.verify-productionreports the same 524 packed files before and after, and the full suite is green. The_loopstatemove is the only change touching many paths, and every one of them is a pure rename.