Repository navigation
Install the session system - #36
Merged
Merged
Conversation
added 3 commits
November 6, 2026 20:47
The mechanical half of the session system: start, claim, close and the CI wait; the git guard and the commit-identity check; one skill per kind of session. The identity hook enforces what this project already practised: every commit authored by an allowed address, and no attribution trailers. .gitignore excluded all of .claude/, which would have kept the hooks and skills off every other machine. It now excludes only what is personal - a machine's own settings.local.json - and lets the system's own files through.
WORKFLOW.md is now the rulebook; the queue, the index and the decisions registry are empty and waiting. The checker runs in CI. The five completed plans move to PLANNING/legacy/ with a superseded banner each and a backfilled row in TODO_INDEX.md. Two things stay where they are, deliberately: the five *_audit/ evidence directories, because commit messages cite them by path and they are how any number in those plans is re-checked, and the atmospheric-correction expert survey, which is a live deliverable for outside reviewers rather than a superseded plan. TODO_PLANNING_composites.md is still open, so it becomes this system's first plan instead of legacy. Two of the checker's own tests assumed branches and titles that name the session. This project's do not, so they now link a PR to its row the way a row here really does it: by recording the branch or the PR number. To be reported upstream.
CLAUDE.md is what every session reads first. The planning workflow runs the checker and its own tests on every PR, with no path filter on purpose: the PRs it exists for are the ones that change only PLANNING/.
Comment on lines
+10
to
+17
| runs-on: ubuntu-latest | ||
| timeout-minutes: 5 | ||
| steps: | ||
| - uses: actions/checkout@v5 | ||
| with: | ||
| fetch-depth: 0 | ||
| - name: check the PR's commits | ||
| run: scripts/check_commit_identity.sh "origin/${{ github.base_ref }}..${{ github.event.pull_request.head.sha }}" |
Comment on lines
+12
to
+24
| runs-on: ubuntu-latest | ||
| timeout-minutes: 5 | ||
| steps: | ||
| - uses: actions/checkout@v5 | ||
| - uses: actions/setup-python@v6 | ||
| with: | ||
| python-version: "3.12" | ||
| - name: check_planning.py | ||
| run: python3 PLANNING/check_planning.py | ||
| - name: the checker's own tests | ||
| run: python3 -m unittest PLANNING/test_check_planning.py -v | ||
| - name: the queue editor's tests | ||
| run: python3 -m unittest PLANNING/test_queue.py -v |
A claim and a close change only PLANNING/ Markdown, and the suite cannot tell that from a code change: a row that moved one character would run the whole thing. ci.yml now ignores PLANNING/**. Nothing is left uncovered. The planning workflow has no path filter on purpose and runs the checker and its tests on exactly those PRs, and docs.yml already filtered by path - which is why the docs image did not build for this branch. main is unprotected, so a skipped job cannot leave a required check pending and block a merge; checked before making the change.
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.
Installs agent-session-kit so that pysent's accumulated knowledge is available to any session on any machine, rather than living in one account's local memory. The library is untouched: 592 passed / 18 skipped, and nothing under
src/ortests/changed.What is installed
PLANNING/WORKFLOW.md(the rulebook), the queue, the plan index, the decisions registry,check_planning.pyand its tests in CI, the session scripts, the git hooks, five session skills, andCLAUDE.mdas the bootstrap every session reads first.The owner's answers (2026-11-06, frozen in WORKFLOW.md §12)
Two lanes — L library, D docs. Memory repo
epifanio/pysent-memory. Nothing deploys; consumers pin a commit. Commit identity on. Docs check is the docs image build.PLANNING_HOME=project. One maintainer.One override. The kit ships
BRANCH_PREFIX=claude/andPR_TITLE=[{session}] {title}, which name the agent and the session. pysent follows the rule already adopted onmetno/mapping-api: nothing names an AI tool, an agent or a session id — not in a commit, a branch, a file, a PR title or body. So branches are<kind>/<slug>(this one ischore/setup-session-system) and PR titles are plain sentences.Things worth reviewing rather than skimming
The finished plans moved to
PLANNING/legacy/with superseded banners and backfilled index rows. Two things stayed put on purpose: the five*_audit/evidence directories, because commit messages cite them by path and they are how any number in those plans is re-checked; and the atmospheric-correction expert survey, which is a live deliverable for outside reviewers, not a superseded plan..gitignoreexcluded all of.claude/, which would have kept the hooks and skills off every other machine — exactly the gap this install exists to close. It now excludes onlysettings.local.json, the per-machine override.Two of the checker's own tests failed on this configuration. They link a PR to a queue row by the session's name in the branch or title, which the override disables; the checker itself handles that correctly (
MATCH_BY_SESSION_NAMEis off and rows link by recording the branch or PR number), but its test fixtures still assumed the default naming. They now use the mechanism this project actually uses. All 60 pass. To be reported upstream.Two things for the owner
pysent's CI has no
paths-ignore, so every claim and close PR — docs-only by construction — will pay a full test run and a docs image build. The kit's SETUP flags this. Addingpaths-ignore: PLANNING/**toci.ymlanddocs.ymlwould fix it, but it changes the project's CI behaviour, so it is not in this PR.The memory repo is not yet wired (SETUP step 7):
epifanio/pysent-memoryexists and holds today's backup, butautoMemoryDirectorystill points at this machine's local directory. That is the next step and it is what actually closes the gap.