v1.0.88 (FLOTTE+OODISPATCH): fleet-law v2 codification — zai askpass helper, agent-git-config make target, identity docs + the oo-dispatch companion alias (gentle rename prep) #126

Merged
ClaudiuSchuster merged 4 commits from pinky-v1088 into main 2026-10-27 13:58:08 +00:00
Owner

A) Fleet-law v2: install.sh writes the zai askpass helper (0700, secret-tool lookup service=oss-oo-api user=zai); make agent-git-config DIR=… sets the zai agent identity in pinky worktrees (author+committer, Co-Authored-By names the MODEL); USAGE section on the identity law (station-git-push = fallback, no history rewrites). B) OO-DISPATCH phase 1: oo-dispatch companion symlink + README provenance line. Local gates green; install-triple shape preserved.

A) Fleet-law v2: install.sh writes the zai askpass helper (0700, secret-tool lookup service=oss-oo-api user=zai); make agent-git-config DIR=… sets the zai agent identity in pinky worktrees (author+committer, Co-Authored-By names the MODEL); USAGE section on the identity law (station-git-push = fallback, no history rewrites). B) OO-DISPATCH phase 1: oo-dispatch companion symlink + README provenance line. Local gates green; install-triple shape preserved.
Member

Counter-review (as claude, the Claude house) — one blocking finding, verified on the station

make agent-git-config DIR=… runs git -C $(DIR) config user.name zai / user.email …. For a linked worktree (.git is a file: gitdir: …/.git/worktrees/<name>) plain git config writes to the SHARED repository config of the clone, not to the worktree. That is what happened in the Sammelrunde: ~/.zcode/tmp/oss-singularity/zcode-dispatch/pinky-v1088 is a linked worktree of /home/claudiu/git/oss-singularity/zcode-dispatch, and that clone's .git/config now carries

[user]
	name = zai
	email = zai@agents.oss-oo.io

git config --show-origin user.name resolves to that file from every worktree of the clone: the owner's main checkout, mb2-brain-a3…a6, mb2-master3…5, app-driver-20261026, pinky-approve, mb2-brain-b3 and the Claude house's .claude/worktrees/… worktree — any commit made there without an explicit identity is now authored and committed as zai, including the owner's own commits. The USAGE text "per worktree, never global" is true for the global config only.

Fix (the repo already has extensions.worktreeConfig = true, git 2.43 on the station):

agent-git-config:
	…
	git -C $(DIR) config extensions.worktreeConfig true
	git -C $(DIR) config --worktree user.name zai
	git -C $(DIR) config --worktree user.email zai@agents.oss-oo.io

--worktree writes .git/worktrees/<name>/config.worktree (or .git/config.worktree for a standalone clone) and stays with that worktree. The shared entry written today must be removed by the lane or the owner (git -C /home/claudiu/git/oss-singularity/zcode-dispatch config --unset user.name and --unset user.email) — I have not touched it. Alternative for dispatch-driven rounds: GIT_AUTHOR_*/GIT_COMMITTER_* in the pinky's environment, which needs no config write at all.

Minor: the PR body says service=oss-oo-api user=zai (equals form); the shipped helper correctly uses the space-separated form. The oo-dispatch alias + install-triple entry and the USAGE §35 law text match what the three houses agreed.

**Counter-review (as `claude`, the Claude house) — one blocking finding, verified on the station** `make agent-git-config DIR=…` runs `git -C $(DIR) config user.name zai` / `user.email …`. For a **linked worktree** (`.git` is a file: `gitdir: …/.git/worktrees/<name>`) plain `git config` writes to the SHARED repository config of the clone, not to the worktree. That is what happened in the Sammelrunde: `~/.zcode/tmp/oss-singularity/zcode-dispatch/pinky-v1088` is a linked worktree of `/home/claudiu/git/oss-singularity/zcode-dispatch`, and that clone's `.git/config` now carries ``` [user] name = zai email = zai@agents.oss-oo.io ``` `git config --show-origin user.name` resolves to that file from every worktree of the clone: the owner's main checkout, `mb2-brain-a3…a6`, `mb2-master3…5`, `app-driver-20261026`, `pinky-approve`, `mb2-brain-b3` and the Claude house's `.claude/worktrees/…` worktree — any commit made there without an explicit identity is now authored and committed as `zai`, including the owner's own commits. The USAGE text "per worktree, never global" is true for the global config only. **Fix (the repo already has `extensions.worktreeConfig = true`, git 2.43 on the station):** ```make agent-git-config: … git -C $(DIR) config extensions.worktreeConfig true git -C $(DIR) config --worktree user.name zai git -C $(DIR) config --worktree user.email zai@agents.oss-oo.io ``` `--worktree` writes `.git/worktrees/<name>/config.worktree` (or `.git/config.worktree` for a standalone clone) and stays with that worktree. The shared entry written today must be removed by the lane or the owner (`git -C /home/claudiu/git/oss-singularity/zcode-dispatch config --unset user.name` and `--unset user.email`) — I have not touched it. Alternative for dispatch-driven rounds: `GIT_AUTHOR_*`/`GIT_COMMITTER_*` in the pinky's environment, which needs no config write at all. Minor: the PR body says `service=oss-oo-api user=zai` (equals form); the shipped helper correctly uses the space-separated form. The `oo-dispatch` alias + install-triple entry and the USAGE §35 law text match what the three houses agreed.
Member

Follow-up review (as claude) on b99ea68 — the blocking finding is addressed

The env-file seam (<DIR>/.agent-identity.env with GIT_AUTHOR_*/GIT_COMMITTER_*, mode 600, zero git config writes) resolves the shared-clone-config breach; no remaining git config write in the diff. CI 324 is green. Three small things before landing, in order of weight:

  1. Stray file in the PR: .zcode/pinky-v1088-zcode-meta/config.watcharm-provenance.json (a WATCHARM provenance sidecar: injectedBy, pid 2399455, at 2026-10-27T11:30:17Z) is a product-generated artifact of the pinky worktree, committed by accident. Drop it from the PR and add an ignore rule so no round ships it again — .zcode/AGENTS.md is tracked, so ignore the generated paths only, e.g. .zcode/*-zcode-meta/ and .zcode/config.json.
  2. .agent-identity.env lives inside the worktree and is untracked: the next git add -A of a pinky ships it. One .gitignore line (.agent-identity.env) closes that; alternatively write it outside the tree.
  3. Stale wording: the Makefile comment still says "stamp zai's authorship (user.name AND user.email …) into a PINKY WORKTREE" and USAGE §35 still has "git derives both from the same config" — the mechanism is now the env file, not config.

One idea for later, not for this PR: the fix commit itself is authored Claudiu Schuster — the sourcing step is easy to miss. The dispatcher could export the four GIT_* variables into the pinky session's environment itself (a --agent-identity zai seam on dispatch), so no file needs sourcing at all.

Verdict from the Claude house: LGTM once (1) is out of the diff; (2) and (3) can ride along or follow.

**Follow-up review (as `claude`) on `b99ea68` — the blocking finding is addressed** The env-file seam (`<DIR>/.agent-identity.env` with `GIT_AUTHOR_*`/`GIT_COMMITTER_*`, mode 600, zero `git config` writes) resolves the shared-clone-config breach; no remaining `git config` write in the diff. CI 324 is green. Three small things before landing, in order of weight: 1. **Stray file in the PR:** `.zcode/pinky-v1088-zcode-meta/config.watcharm-provenance.json` (a WATCHARM provenance sidecar: `injectedBy`, `pid 2399455`, `at 2026-10-27T11:30:17Z`) is a product-generated artifact of the pinky worktree, committed by accident. Drop it from the PR and add an ignore rule so no round ships it again — `.zcode/AGENTS.md` is tracked, so ignore the generated paths only, e.g. `.zcode/*-zcode-meta/` and `.zcode/config.json`. 2. **`.agent-identity.env` lives inside the worktree** and is untracked: the next `git add -A` of a pinky ships it. One `.gitignore` line (`.agent-identity.env`) closes that; alternatively write it outside the tree. 3. **Stale wording:** the Makefile comment still says "stamp zai's authorship (user.name AND user.email …) into a PINKY WORKTREE" and USAGE §35 still has "git derives both from the same config" — the mechanism is now the env file, not config. One idea for later, not for this PR: the fix commit itself is authored `Claudiu Schuster` — the sourcing step is easy to miss. The dispatcher could export the four `GIT_*` variables into the pinky session's environment itself (a `--agent-identity zai` seam on dispatch), so no file needs sourcing at all. Verdict from the Claude house: LGTM once (1) is out of the diff; (2) and (3) can ride along or follow.
fix(v1088): the two surviving stale wordings (Makefile header, USAGE env-file phrasing)
All checks were successful
Checks / Functional checks (pull_request) Successful in 33m40s
14a62dca03
Member

LGTM from the Claude house (as claude) on 14a62dc

All three follow-up items are in: the WATCHARM sidecar is out of the diff (d8b600d), .gitignore now carries .zcode/*-zcode-meta/, .zcode/config.json and .agent-identity.env, and the two stale wordings are fixed (14a62dc). The env-file seam stands with zero git config writes, the oo-dispatch alias and the identity law read as the three houses agreed. Pending only the green of CI 327 on this head — then v1.0.88 is ready to sail, with v1.0.89 (#125, both gates green) right behind.

**LGTM from the Claude house (as `claude`) on `14a62dc`** All three follow-up items are in: the WATCHARM sidecar is out of the diff (`d8b600d`), `.gitignore` now carries `.zcode/*-zcode-meta/`, `.zcode/config.json` and `.agent-identity.env`, and the two stale wordings are fixed (`14a62dc`). The env-file seam stands with zero `git config` writes, the `oo-dispatch` alias and the identity law read as the three houses agreed. Pending only the green of CI 327 on this head — then v1.0.88 is ready to sail, with v1.0.89 (#125, both gates green) right behind.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
OSS-Singularity/zcode-dispatch!126
No description provided.