eleven / ocho Public
--- name: end-session description: End-of-session checklist β confirm all work is committed/pushed/PR'd and that the per-session status.elevenmessenger.com ledgers (SSH access, carbon tally, prompt registry) are written before wrapping up. ---
π€ end-session β leave nothing owed
Run this before wrapping up a working session. Two gates: (A) the work is finished and pushed, (B) the public status ledgers this session touched are written. Check and report first; complete the mechanical parts only with the user's OK β never auto-merge, auto-deploy, or auto-publish (those stay the user's call). Never echo secrets or capability/invite links (transcripts are public β [[transcripts-are-public]]).
Work through both gates, then end with the owed/clear summary at the bottom.
A. Work finished & pushed
- Tasks. If a task list is in use,
TaskListβ anyin_progress/pendingleft? Finish them, or state which are intentionally deferred and why. - Working trees.
git statusin the main checkout, andgit worktree listthengit -C <wt> statusfor every open worktree. Uncommitted changes β commit (area-prefixed:web:/server:/docs:β¦) or explain why they're left. - Unpushed commits.
git log --branches --not --remotes --oneline. β οΈ In a shared checkout this lists every session's local branches, not just yours β scope to the branches THIS session created. Anything of yours that's genuinely local-only β push it (feature branches, nevermain). Note a squash-merged branch leaves a stale local ref that shows here as "unpushed" even though the work is onmainβ that's not owed work, just delete the ref (git branch -D <branch>). - Open PRs.
gh pr list --author @me --state open. β οΈ This returns all of your account's open PRs across every session (the team commits under one author here), so scope to the PRs THIS session opened β the rest are other sessions' and not yours to touch. For each of yours: it's ready (offer togh pr merge <n> --squash --delete-branch) or say what it's waiting on. After a squash-merge, delete the remote branch +git worktree removethe merged worktree (gh may fail the local step whenmainis a sibling worktree β that's cosmetic; the server-side merge still lands). - Leftover worktrees from already-merged branches β
git worktree remove. - Shared
maincheckout is shared with other sessions β don't force-pull or mutate it; just report if it's behind after a merge.
B. Status ledgers (status.elevenmessenger.com)
Authoritative procedures: docs/status.md. Three ledgers are per-session (below). The rest β books / economics / contributors / security / milestones β are periodic, not session-gated; mention one only if this session changed its inputs.
B1. SSH access ledger β REQUIRED if this session touched a fleet box
Did this session ssh/scp to the router box (elevenbox, 89.167.122.227, or any *.11ch.at / fleet box) β e.g. a canary deploy, a teardown, a box inspection? If yes there must be a why-entry, or the public page renders the session as "no summary recorded" (that state IS the enforcement).
- Check: is there a
web/status/ssh/<today>-*.jsoncovering this session's window? (ls web/status/ssh/.) - If missing, write
web/status/ssh/YYYY-MM-DD-<slug>.json: ``json { "date": "YYYY-MM-DD", "operator": "Full Name", "window": "HH:MMβHH:MM UTC (approx)", "why": "terse what-not-how summary", "refs": ["https://github.com/elevenmessenger/messenger/pull/NNN"] }`-operator**must** match a handle inweb/status/ssh-operators.json, or the join misses. -whyis *what, not how* β never a command, credential, token, host token, or email. A security-sensitive session publishes as"why": "(withheld: security)"rather than vanishing. Redaction bar:web/status/ssh/README.md. -date+window` are UTC and approximate; one entry may cover several sessions in the same working window. - The entry rides a normal commit/PR. It only reaches the page once scp'd to the box (
web/status/ssh/*.jsonβ/opt/lchat/status-pages/ssh/), which happens on a status publish β so if this session is already publishing to the box, copy it too; otherwise the committed entry is enough and the next publish carries it.
B2. Carbon tally
- Run
node tools/carbon-tally.mjs check. Silent β nothing owed. If it says accrue (this machine's newest entry is >3 days old β its transcripts prune after ~a week, so a missed week is lost): 1.node tools/carbon-tally.mjs --write(per-source cutoffs; safe to re-run), 2. commitweb/status/carbon.jsonas a tiny standalone PR merged promptly (two branches accruing the same window is the one race the cutoffs can't see; the contract test catches it on main), 3. copyweb/status/carbon.jsonto the box's/opt/lchat/status-pages/. docs/status.md Β§ Keeping the carbon tally accruing. The check nags; the accrual is a judgment call you run.
B3. Prompt registry
Nothing auto-publishes the registry. The only automation is the SessionStart hook running check, which merely nags β building, summarising, and uploading are all manual, so the ledger drifts whenever they're skipped.
- Run
node tools/prompt-registry.mjs check. Silent / "no corpus at β¦" means the staleness nag is quiet β but β οΈcheckonly tests corpus AGE (>3 days), not whether recent sessions are SUMMARISED. A corpus published <3 days ago without the haiku step passes silently. The visible tell is rows onprompts.htmlthat fall back to "FIRST PROMPT / LATEST" instead of a one-line summary β those sessions still owe the haiku summarise step even thoughcheckis quiet. So don't trustcheckalone here: glance atprompts.html(or the builtindex.json) for un-summarised rows. - To accrue (nagged, OR un-summarised rows exist), per
docs/status.md Β§ The prompt registry: build (--out <dir>) β summarise every new session with haiku subagents over the REDACTED build output only (never raw transcripts; β€90-char one-liners ending in the session's most relevant GitHub URL) β re-build (fail-closed re-scan) β upload the corpus β commit the hash-ledger entry. It's heavy, creds-bound (bucket PutObject), and judgment-bound (the security sweep) β publishing is opt-in, so do it deliberately, never half-run it, and never auto-publish it from this skill.
What this skill does NOT do
- Merge / deploy / publish without the user's OK β fleet publishes, box scps, and PR merges are surfaced as offers, never taken silently.
- Touch the secrets vault, echo any secret, or print an invite/capability link.
- Force-update or dirty the shared
maincheckout.
Report
End with a tight table β each item β clear / β οΈ owed (with the single action that closes it) / β n/a this session:
A1 tasks Β· A2 working trees Β· A3 unpushed Β· A4 open PRs Β· A5 worktrees Β· A6 main
B1 ssh ledger Β· B2 carbon Β· B3 prompt registry