AGENTS.md
+58 −8
https://raw.githubusercontent.com/filelayer/filelayer/HEAD/AGENTS.md
− npm run verify && git push # everything else− `benchmark/gate4/RESULTS.md` searched for this project on 16 October 2026 and got− ## And verify BEFORE you push− npm run verify && git push− The `&&` only protects the step that comes after it. Put the irreversible one− last, always: this is the same shape as `npm run verify` ending in a stamp that− `prepublishOnly` refuses to publish without.− - `npm publish`, `npm deprecate`, or moving a dist-tag+ npm run verify # before a push, see below+ A search measurement run on 16 October 2026 looked for this project and got+ ## How a push happens+ A push is what makes a commit public, so it is the step a human approves. An+ agent working in this repository may push its own commits to `main`, and only+ this way:+ 1. `npm run verify` is green on the tree being pushed.+ 2. Refresh what the remote has, and show exactly what would go out, one line+ per commit saying what it changes publicly:+ ```+ git fetch https://github.com/filelayer/filelayer.git main:refs/remotes/origin/main+ git log --oneline origin/main..HEAD+ ```+ If any of those commits touches `.github/workflows/`, say so on its own+ line: `this push changes CI: <what>`. CI holds the live-storage secrets,+ and a workflow change is the one way a push could expose them. Without+ that line, no push.+ 3. Wait for the maintainer to write **ok push** for that list. No "ok push",+ no push. A new commit after the approval needs a new approval.+ 4. Push over HTTPS with the token in `.env.github-push` at the repository root+ (the token alone, ignored by git). It goes to git through a credential+ helper that reads the file, so it never appears in a URL, a command line,+ an environment listing or any output:+ ```+ git -c credential.helper= -c credential.helper='!f() { echo username=x-access-token; printf "password=%s\n" "$(tr -d "\r\n" < .env.github-push)"; }; f' push https://github.com/filelayer/filelayer.git HEAD:main+ ```+ Never print, copy, log, commit or move that file or any part of it. Not+ its first characters either: a prefix is part of the secret.+ Never force-push and never push another branch or repository. A rejected push+ stops the work and is reported, not retried another way.+ ### How a release happens+ A release is a tag, and the tag is what publishes. Show the maintainer the+ version, the CHANGELOG headline and the tarball's file count+ (`npm pack --dry-run` in `packages/core`), wait for **ok publish** for that+ version, then push the tag `vX.Y.Z` the same way as a commit:+ git tag -a vX.Y.Z -m "@filelayer/core X.Y.Z"+ git -c credential.helper= -c credential.helper='!f() { echo username=x-access-token; printf "password=%s\n" "$(tr -d "\r\n" < .env.github-push)"; }; f' push https://github.com/filelayer/filelayer.git refs/tags/vX.Y.Z+ `.github/workflows/publish.yml` refuses a tag that does not name the version in+ `packages/core/package.json` or does not point at a commit on `main`, runs both+ verification chains, and publishes with npm trusted publishing. Its