# Release contract

Every deployed site change must also appear in the Git repository served by this site. This is an explicit owner requirement. Do not substitute GitHub integration or publish source separately later.

1. Finish code, documentation, and snapshot changes. Stage all source files.
2. Run `npm run source:package -- "A descriptive release message"` manually. This preserves public history and packages the exact sanitized source, including file modes and deletions.
3. Stage the generated pack, bundle, archive, manifests, and `.source-version.json`. Commit all changes. Do not change source after packaging without repeating step 2.
4. Build; the source digest gate must pass. Push the committed state, package the build, and publish through Sites.
5. Clone the actual public endpoint. Compare its HEAD to `/source.json`, recompute the exported source digest, and run `git fsck --full`. Do not hand off stale source.

Keep this Site's existing project identity. Chain support belongs in `lib/chains.ts`; do not advertise a chain until its feed and initial snapshot are implemented. Tickers are labels, not asset identities. Data timestamps must never advance on a failed or cached refresh.
