Skip to content

Install the session system - #36

Merged
epifanio merged 4 commits into
mainfrom
chore/setup-session-system
Nov 6, 2026
Merged

epifanio merged 4 commits into
mainfrom
chore/setup-session-system

Conversation

@epifanio

@epifanio epifanio commented Nov 6, 2026

Copy link
Copy Markdown
Collaborator

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/ or tests/ changed.

What is installed

PLANNING/WORKFLOW.md (the rulebook), the queue, the plan index, the decisions registry, check_planning.py and its tests in CI, the session scripts, the git hooks, five session skills, and CLAUDE.md as 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/ and PR_TITLE=[{session}] {title}, which name the agent and the session. pysent follows the rule already adopted on metno/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 is chore/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.

.gitignore excluded 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 only settings.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_NAME is 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. Adding paths-ignore: PLANNING/** to ci.yml and docs.yml would 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-memory exists and holds today's backup, but autoMemoryDirectory still points at this machine's local directory. That is the next step and it is what actually closes the gap.

Massimo Di Stefano 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.
@epifanio
epifanio merged commit b4f0b1c into main Nov 6, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants