Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/agents/reviewer.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ You are a cold review agent. You did not write this change and you are not here
- Check the diff's behavioral claims (in code, text, PR body, node modes) against `REALITY.md` at the repo root: a "works" claim closed not on its row's carrier is a finding; a class missing from the table is a finding against the table.
- Read the diff against the doer's tendencies, by name: a plausible completion in place of a result; local evidence passed off as global; filling a structural gap with invented distinctions; coherence over truth — a neat explanation with no footing in the code; capture by the written artifact — improving it instead of re-weighing the need; piling on rules in response to a mistake; preferring the measurable to the essential. A finding is a tendency caught on a specific line, not a label.
- Judge the realm tool surface by the seniority of what each source covers. A surface snapshot, if the repo keeps one, is taken from the server by hand and checks tool names and global vocabularies — its firing on a dead name outranks any text; it carries no per-tool action vocabulary (only the batch's actions) and parameters only as argument names, without call forms — on actions and parameters the tool's own description (`action="?"`, the description text in the session) outranks everything; the code of a relaying client (the bridge) that only passes the call on ranks below both. A parameter named by the tool's description is alive whatever the relay's types say.
- Do not touch the working copy — it is shared with the author and is one per machine: no git command that writes to the working tree, the index or local refs (`checkout`, `switch`, `restore`, `reset`, `stash`, `clean`, `apply`, `cherry-pick`, `worktree add` — examples, not a list); `git fetch origin` is allowed — it moves only remote-tracking refs. Read the diff and files by the branch the brief names: `git fetch origin`, then `git diff origin/main...origin/<branch>` and `git show origin/<branch>:<path>` — not `...HEAD`: in an isolated worktree HEAD sits on trunk and that diff is empty. Whether you are isolated — check, do not assume: in a separate worktree `git rev-parse --git-common-dir` differs from `git rev-parse --git-dir`; equal — you are in the shared copy, and the ban above is the only fence.
- Do not touch the working copy — it is shared with the author and is one per machine: no git command that writes to the working tree, the index or local refs (`checkout`, `switch`, `restore`, `reset`, `stash`, `clean`, `apply`, `cherry-pick`, `worktree add` — examples, not a list); `git fetch origin` is allowed — it moves only remote-tracking refs. Read the diff and files by the local branch the brief names — the review comes before the push, so `origin/<branch>` may be missing or stale (realm `@nick/craft`, #127): `git fetch origin`, then `git diff origin/main...<branch>` and `git show <branch>:<path>`, and check that `git rev-parse <branch>` is the commit the brief names — not `...HEAD`: in an isolated worktree HEAD sits on trunk and that diff is empty. A branch with no local ref (release-please's release PR) — read `origin/<branch>`. Whether you are isolated — check, do not assume: in a separate worktree `git rev-parse --git-common-dir` differs from `git rev-parse --git-dir`; equal — you are in the shared copy, and the ban above is the only fence.
- The brief starts with a launch line with a case — the review is spoken there too. Your own bridge (the one on which `iskron_stand` with `satellite_of` makes you a satellite: in Claude Code the `iskron-sub-reviewer` entry in the frontmatter, in OpenCode the delivery's plugin; no entry in the frontmatter is not by itself a refusal). If the harness already executed the line and a word about entering follows it, you are already standing and inside — no repeated `stand`/`join`. Not standing — `iskron_stand(realm, karta, satellite_of=<caller's seat from the brief>)`; not inside — `join` the case from the launch line; entering — `read` the case and its nodes, the first word a restatement; when finished — `leave`. The bridge did not come up (no `iskron_*` tools) or `iskron_stand` with `satellite_of` did not make you a satellite (refused as a session bridge) — such a launch is not allowed: you do not write to the realm or the case, you do not speak through someone else's bridge or name, you do not call `iskron_stand`, `join`, `leave`; say so on a line of its own in place of `NODES:`, and the launcher writes the review into the case. The first word restates what you are reviewing (`iskron_case(action="say")`); findings, `INTEGRATION` and the stage verdict — a word there too: no findings, findings, or `NEEDS_CONTEXT` with the break named.
- Change nothing, do not change the realm, write no fixes, spawn no sub-agents; a word in the case is not a change.
2 changes: 1 addition & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"hooks": [
{
"type": "command",
"command": "p=$(cat); { printf %s \"$p\" | jq -e 'def a: \"(?:>&|\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^;&|)\\n\\\\x27\\\\x22\\\\\\\\])*\"; def at(h; n): \"(?:^|[;&|(\\n] *)\" + h + \"(?=[ ;&|)\\n]|$)(?!\" + a + \" (?:\" + n + \")(?:[ ;&|)\\n]|$))\"; def out: (.tool_response | if type == \"object\" then \"\\(.stdout // \"\")\\n\\(.stderr // \"\")\" else tostring end); def ran(h; n; said): (.tool_input.command // \"\") as $c | out as $o | ($c | test(at(h; n) + a + \"[ \\n]*(?:&&|$)\")) or (($c | test(at(h; n))) and ($o | test(said))); def tagonly: [match(\"(?:\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^ \\\\x27\\\\x22\\\\\\\\])+\"; \"g\").string] | reduce .[] as $t ({k: false, p: [], t: false, b: false}; if .k then .k = false elif ($t | test(\"^[0-9]*(?:>>?|<|>&)$\")) then .k = true elif ($t | test(\"^[0-9]*(?:>>?|<|>&)\")) then . elif ($t | test(\"[\\\\x27\\\\x22\\\\\\\\$`]\")) then .b = true elif $t == \"--tags\" then .t = true elif ($t | test(\"^(?:--(?:all|mirror|follow-tags|delete)(?:=|$)|-d$)\")) then .b = true elif ($t | test(\"^(?:-o|--push-option|--receive-pack|--exec)$\")) then .k = true elif ($t | startswith(\"-\")) then . else .p += [$t] end) | .p[1:] as $r | ($r | reduce .[] as $x ({k: false, ok: true}; if .k then .k = false elif $x == \"tag\" then .k = true elif ($x | test(\"^\\\\+?refs/tags/[^:]+(?::refs/tags/[^:]+)?$\")) then . else .ok = false end) | .ok and (.k | not)) as $ok | if .b then \"no\" elif $ok and (($r | length) > 0 or .t) then \"tag\" elif ($r | length) == 1 and (.t | not) and ($r[0] | test(\"^(?!refs/|tag$)[^:+]+$\")) then \"bare\" else \"no\" end; def tagcmd: out as $o | [(.tool_input.command // \"\") | match(\"(?:^|[;&|(\\n] *)(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push(?=[ ;&|)\\n]|$)(\" + a + \")\"; \"g\") | .captures[0].string | tagonly] | length > 0 and all(. != \"no\") and ((any(. == \"bare\") | not) or ($o | test(\"^(?=[\\\\s\\\\S]*\\n [*] \\\\[new tag\\\\])(?![\\\\s\\\\S]*\\n (?:[ +-] |\\\\* (?!\\\\[new tag\\\\])))\"))); ran(\"(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push\"; \"-h|--help\"; \"To [^\\n]+(?:\\n [!=] [^\\n]*)*\\n [ *+-]\") and (out | test(\"(?:^|\\n)(?:fatal:|error:| ! \\\\[(?:remote )?rejected\\\\])\") | not) and (tagcmd | not)' >/dev/null || { printf %s \"$p\" | jq -e 'def a: \"(?:>&|\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^;&|)\\n\\\\x27\\\\x22\\\\\\\\])*\"; def out: (.tool_response | if type == \"object\" then \"\\(.stdout // \"\")\\n\\(.stderr // \"\")\" else tostring end); def tagonly: [match(\"(?:\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^ \\\\x27\\\\x22\\\\\\\\])+\"; \"g\").string] | reduce .[] as $t ({k: false, p: [], t: false, b: false}; if .k then .k = false elif ($t | test(\"^[0-9]*(?:>>?|<|>&)$\")) then .k = true elif ($t | test(\"^[0-9]*(?:>>?|<|>&)\")) then . elif ($t | test(\"[\\\\x27\\\\x22\\\\\\\\$`]\")) then .b = true elif $t == \"--tags\" then .t = true elif ($t | test(\"^(?:--(?:all|mirror|follow-tags|delete)(?:=|$)|-d$)\")) then .b = true elif ($t | test(\"^(?:-o|--push-option|--receive-pack|--exec)$\")) then .k = true elif ($t | startswith(\"-\")) then . else .p += [$t] end) | .p[1:] as $r | ($r | reduce .[] as $x ({k: false, ok: true}; if .k then .k = false elif $x == \"tag\" then .k = true elif ($x | test(\"^\\\\+?refs/tags/[^:]+(?::refs/tags/[^:]+)?$\")) then . else .ok = false end) | .ok and (.k | not)) as $ok | if .b then \"no\" elif $ok and (($r | length) > 0 or .t) then \"tag\" elif ($r | length) == 1 and (.t | not) and ($r[0] | test(\"^(?!refs/|tag$)[^:+]+$\")) then \"bare\" else \"no\" end; def tagcmd: out as $o | [(.tool_input.command // \"\") | match(\"(?:^|[;&|(\\n] *)(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push(?=[ ;&|)\\n]|$)(\" + a + \")\"; \"g\") | .captures[0].string | tagonly] | length > 0 and all(. != \"no\") and ((any(. == \"bare\") | not) or ($o | test(\"^(?=[\\\\s\\\\S]*\\n [*] \\\\[new tag\\\\])(?![\\\\s\\\\S]*\\n (?:[ +-] |\\\\* (?!\\\\[new tag\\\\])))\"))); (tagcmd | not) and ((.tool_input.command // \"\") | (test(\"^(?:\" + a + \"[;&|(\\n] *)*(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push(?=[ ;&|)\\n]|$)(?!\" + a + \" (?:-h|--help)(?:[ ;&|)\\n]|$))\" + a + \" (?:-q|--quiet)(?=[ ;&|)\\n]|$)\") and (test(\"<<\") | not))) and (out | test(\"(?:^|\\n)(?:fatal:|error:| ! \\\\[(?:remote )?rejected\\\\])\") | not)' >/dev/null && h=$(git rev-parse HEAD 2>/dev/null) && [ -n \"$h\" ] && [ \"$h\" = \"$(git rev-parse \"@{push}\" 2>/dev/null)\" ] && case \"$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\" in main|master) false;; *) true;; esac; }; } && echo '{\"hookSpecificOutput\":{\"hookEventName\":\"PostToolUse\",\"additionalContext\":\"A push shipped nothing: self-check the branch diff, run the vocabulary pass over the PR text, and run the light review of the finished branch (AGENTS.md, Cold review of the stage). Shipping is the merge.\"}}' || true"
"command": "p=$(cat); { printf %s \"$p\" | jq -e 'def a: \"(?:>&|\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^;&|)\\n\\\\x27\\\\x22\\\\\\\\])*\"; def at(h; n): \"(?:^|[;&|(\\n] *)\" + h + \"(?=[ ;&|)\\n]|$)(?!\" + a + \" (?:\" + n + \")(?:[ ;&|)\\n]|$))\"; def out: (.tool_response | if type == \"object\" then \"\\(.stdout // \"\")\\n\\(.stderr // \"\")\" else tostring end); def ran(h; n; said): (.tool_input.command // \"\") as $c | out as $o | ($c | test(at(h; n) + a + \"[ \\n]*(?:&&|$)\")) or (($c | test(at(h; n))) and ($o | test(said))); def tagonly: [match(\"(?:\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^ \\\\x27\\\\x22\\\\\\\\])+\"; \"g\").string] | reduce .[] as $t ({k: false, p: [], t: false, b: false}; if .k then .k = false elif ($t | test(\"^[0-9]*(?:>>?|<|>&)$\")) then .k = true elif ($t | test(\"^[0-9]*(?:>>?|<|>&)\")) then . elif ($t | test(\"[\\\\x27\\\\x22\\\\\\\\$`]\")) then .b = true elif $t == \"--tags\" then .t = true elif ($t | test(\"^(?:--(?:all|mirror|follow-tags|delete)(?:=|$)|-d$)\")) then .b = true elif ($t | test(\"^(?:-o|--push-option|--receive-pack|--exec)$\")) then .k = true elif ($t | startswith(\"-\")) then . else .p += [$t] end) | .p[1:] as $r | ($r | reduce .[] as $x ({k: false, ok: true}; if .k then .k = false elif $x == \"tag\" then .k = true elif ($x | test(\"^\\\\+?refs/tags/[^:]+(?::refs/tags/[^:]+)?$\")) then . else .ok = false end) | .ok and (.k | not)) as $ok | if .b then \"no\" elif $ok and (($r | length) > 0 or .t) then \"tag\" elif ($r | length) == 1 and (.t | not) and ($r[0] | test(\"^(?!refs/|tag$)[^:+]+$\")) then \"bare\" else \"no\" end; def tagcmd: out as $o | [(.tool_input.command // \"\") | match(\"(?:^|[;&|(\\n] *)(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push(?=[ ;&|)\\n]|$)(\" + a + \")\"; \"g\") | .captures[0].string | tagonly] | length > 0 and all(. != \"no\") and ((any(. == \"bare\") | not) or ($o | test(\"^(?=[\\\\s\\\\S]*\\n [*] \\\\[new tag\\\\])(?![\\\\s\\\\S]*\\n (?:[ +-] |\\\\* (?!\\\\[new tag\\\\])))\"))); ran(\"(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push\"; \"-h|--help\"; \"To [^\\n]+(?:\\n [!=] [^\\n]*)*\\n [ *+-]\") and (out | test(\"(?:^|\\n)(?:fatal:|error:| ! \\\\[(?:remote )?rejected\\\\])\") | not) and (tagcmd | not)' >/dev/null || { printf %s \"$p\" | jq -e 'def a: \"(?:>&|\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^;&|)\\n\\\\x27\\\\x22\\\\\\\\])*\"; def out: (.tool_response | if type == \"object\" then \"\\(.stdout // \"\")\\n\\(.stderr // \"\")\" else tostring end); def tagonly: [match(\"(?:\\\\\\\\.|\\\\x27[^\\\\x27]*\\\\x27|\\\\x22(?:[^\\\\x22\\\\\\\\]|\\\\\\\\.)*\\\\x22|[^ \\\\x27\\\\x22\\\\\\\\])+\"; \"g\").string] | reduce .[] as $t ({k: false, p: [], t: false, b: false}; if .k then .k = false elif ($t | test(\"^[0-9]*(?:>>?|<|>&)$\")) then .k = true elif ($t | test(\"^[0-9]*(?:>>?|<|>&)\")) then . elif ($t | test(\"[\\\\x27\\\\x22\\\\\\\\$`]\")) then .b = true elif $t == \"--tags\" then .t = true elif ($t | test(\"^(?:--(?:all|mirror|follow-tags|delete)(?:=|$)|-d$)\")) then .b = true elif ($t | test(\"^(?:-o|--push-option|--receive-pack|--exec)$\")) then .k = true elif ($t | startswith(\"-\")) then . else .p += [$t] end) | .p[1:] as $r | ($r | reduce .[] as $x ({k: false, ok: true}; if .k then .k = false elif $x == \"tag\" then .k = true elif ($x | test(\"^\\\\+?refs/tags/[^:]+(?::refs/tags/[^:]+)?$\")) then . else .ok = false end) | .ok and (.k | not)) as $ok | if .b then \"no\" elif $ok and (($r | length) > 0 or .t) then \"tag\" elif ($r | length) == 1 and (.t | not) and ($r[0] | test(\"^(?!refs/|tag$)[^:+]+$\")) then \"bare\" else \"no\" end; def tagcmd: out as $o | [(.tool_input.command // \"\") | match(\"(?:^|[;&|(\\n] *)(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push(?=[ ;&|)\\n]|$)(\" + a + \")\"; \"g\") | .captures[0].string | tagonly] | length > 0 and all(. != \"no\") and ((any(. == \"bare\") | not) or ($o | test(\"^(?=[\\\\s\\\\S]*\\n [*] \\\\[new tag\\\\])(?![\\\\s\\\\S]*\\n (?:[ +-] |\\\\* (?!\\\\[new tag\\\\])))\"))); (tagcmd | not) and ((.tool_input.command // \"\") | (test(\"^(?:\" + a + \"[;&|(\\n] *)*(?:env +)?(?:[A-Za-z_]+=[^ ]+ +)*(?:rtk +)?git(?: -C [^ ]+)* push(?=[ ;&|)\\n]|$)(?!\" + a + \" (?:-h|--help)(?:[ ;&|)\\n]|$))\" + a + \" (?:-q|--quiet)(?=[ ;&|)\\n]|$)\") and (test(\"<<\") | not))) and (out | test(\"(?:^|\\n)(?:fatal:|error:| ! \\\\[(?:remote )?rejected\\\\])\") | not)' >/dev/null && h=$(git rev-parse HEAD 2>/dev/null) && [ -n \"$h\" ] && [ \"$h\" = \"$(git rev-parse \"@{push}\" 2>/dev/null)\" ] && case \"$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\" in main|master) false;; *) true;; esac; }; } && echo '{\"hookSpecificOutput\":{\"hookEventName\":\"PostToolUse\",\"additionalContext\":\"A push shipped nothing. If the cold review of this commit had not returned before the push, run it now and open no PR before its verdict (AGENTS.md, Cold review of the stage); otherwise open or update the PR on its verdict and run the vocabulary pass over the PR text. Shipping is the merge.\"}}' || true"
}
]
},
Expand Down
Loading
Loading