Skip to content

Release candidate 1.0.0-rc.1: do not merge - #316

Draft
jothimani-rajendran wants to merge 44 commits into
mainfrom
rc
Draft

jothimani-rajendran wants to merge 44 commits into
mainfrom
rc

Conversation

jothimani-rajendran and others added 30 commits October 21, 2026 01:15
README route 2 becomes one merged plugin from a chock.sh selection
(chock install --selection '<code>' --apply) and absorbs the old route 3.
The five chock-*-plugins rows read "retired" until they are removed.
docs/agent-plugins.md lists the builder command and install steps per client
from install/data/install.json instead of the repos; ecosystem.md likewise.
repos.json is the source; data.json is regenerated by derive.py repos.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Add "Host it in your own marketplace" to docs/agent-plugins.md: build with
--dest and no --apply, review the folder and its marker, commit it to the
organisation's marketplace repository, install from there, update by
rebuilding on a newer catalog pin. Name the two absolute-path clients
(Antigravity, OpenHands). Record what was measured on Claude Code and what
is unmeasured.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Claude Code accepts exit 2 and exit 0 with a permissionDecision deny
JSON; chock's adapter emits the JSON form (measured on Claude Code
2.1.305), and the copilot format carries permissionDecision the same
way through its respond template (not measured).

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…ips one quote pair

A hook deny read only "Blocked by chock policy: <policy>" while an ask carried the
guard's line. The deny now appends the guard's first line after the policy name.
Exit codes and each client's JSON shape are unchanged; runtime goldens regenerated.

chock install --selection now strips one surrounding pair of matching single or
double quotes (cmd.exe passes them through), and a decode failure says so.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Removing the plugin left the build folder and the shared chock-local
marketplace behind, and `chock bundle status` kept listing the bundle.
Each client with a confirmed remove command now carries `remove` steps in
data/install.json, printed by `chock install` as "To remove it:": the
agent's plugin removal, the build folder, then the marketplace only when
no other chock build for that agent still uses it.

Codex, Antigravity and Kimi Code carry none: their remove command is not
confirmed. `chock bundle status` is unchanged: it reads only chock's own
build folders, and telling whether an agent still has a build installed
needs a probe of the agent's own plugin registry.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
A team's own build can now install beside a personal one without
re-pointing the shared chock-local registration. The flag sets the name
in the marketplace file and marker, and in every next step, removal
step and note, including the Copilot CLI "already registered" note and
the Claude build command printed for other agents. The name is
lowercase letters, digits and single hyphens, at most 64; anything else
is refused, as is rebuilding a folder under another name. Without the
flag nothing changes.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
The "Host it in your own marketplace" steps now build with
`--marketplace-name <org>-chock --dest <folder>` and install
`chock-guardrails@<name>`. Without a name, adding a second folder
re-points the shared `chock-local` registration and every plugin
installed from it.

Depends on #320 (the flag); this branch does not contain it.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…evel

ast.unparse quotes an f-string that nests a quoted string differently on
3.12.3 (f'{m['k']}') than on 3.12.13 (f"{m['k']}"), so chock sync on
one patch level wrote 15 different runtime files and sync --check failed
on another. Hoist the quoted part of the five affected f-strings into
locals, so no handler f-string nests a string. Add a scan that fails on
any Python if one comes back, and regenerate the runtime goldens.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
claude_plugin.tokens, place.check_owned and place.write_marketplace gained
a required marketplace argument. Other repos call them with the old
signature, so the argument now defaults to the engine's default name.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…chock (IR-17)

README route 2 and the repository table, docs/ecosystem.md and the
repos.json source say the five chock-*-plugins repos are a per-policy
marketplace for machines that cannot install chock, not retired.
data.json regenerated with derive.py repos.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…s are the no-chock route (IR-15, IR-17)

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…s gate rejects (IR-15)

Reflow only; the no-chock paragraph is shortened.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Add tests/test_runtime_compiles_on_oldest_python.py. It compiles .chock/bin/*.py
and tests/fixtures/runtime_goldens/*.py on 3.11: directly on the 3.11 matrix job,
via a python3.11 subprocess elsewhere when one is on PATH. A 3.12-only nested-quote
f-string from ast.unparse now fails CI instead of refusing every hook call on a
3.11 machine (IR-F13).

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
cmd.exe passes single quotes literally, so the examples read --selection <code>.
README route 2 names Python 3.11+, git and a bash for the plugin repos.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…the bash requirement (IR-F1)

Undoes the 175-column reflow; the line budget is met by cutting words in
the hosted-marketplace section. Requirements read Python 3.11+, git and a
bash (Git for Windows includes one).

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…21a)

The --marketplace-name help and the Copilot "already registered" note each
joined two clauses with a semicolon. Same meaning, now a comma. No test or
doc quotes either sentence.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
- cli: `--check` opens a person-only command only where its parser defines the
  flag (sync, recompile) and only before `--`.
- gate: writes of empty content and apply_patch deletes/moves are judged by
  path; the turn-end listing names deleted files and a rename's old name; path
  gates also cover a policy's own folders (content scans still skip them).
- gate: plugin gates judge from the repository top level; the turn-end read
  uses lstat/O_NOFOLLOW/O_NONBLOCK and refuses what it cannot read safely;
  on-disk case is judged on case-insensitive platforms.
- gateway: judge the folded, resolved and cased spellings write_gate uses; a
  scoped gate treats a path it cannot place in the repository as in scope.
- guardrails: in a repository a member is off only where HEAD's toggle file
  says so; the shell guard refuses a write through a path built by expansion.
- tests for each; runtime goldens regenerated. .chock/bin is re-rendered by the
  owner's sync.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
A cp1252 stdout raised UnicodeEncodeError on U+FFFD. Retry with backslashreplace in
the stream encoding; representable text is unchanged.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Both writes now go through the same OSError handling, so a reader that vanishes
during the backslashreplace retry no longer raises past the wrapper.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…udget (SR-6)

judge_patterns spends interpreter start-up out of the caller's budget when it
starts a child. The dead-child test gave those calls the 1 s budget meant for
the catastrophic pattern, so on a loaded runner the fresh child after the
timeout was not up in time and the "(" case reported "no verdict within 1s"
instead of "exited early". The calls that start a child now get
PATTERN_SECONDS; the catastrophic pattern keeps the 1 s budget on an
already-running child. No assertion changed. budget.py and the vendored
runtime are untouched.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
conflicts in regenerated paths taken from PR #319: .chock/bin/claude_code.py, .chock/bin/codex_cli.py, .chock/bin/cursor.py, .chock/bin/devin.py, .chock/bin/gemini_cli.py, .chock/bin/grok.py, .chock/bin/tabnine.py, .chock/bin/vscode_copilot.py, .chock/bin/windsurf.py, tests/fixtures/runtime_goldens/antigravity.py, tests/fixtures/runtime_goldens/claude_code.py, tests/fixtures/runtime_goldens/codex_cli.py, tests/fixtures/runtime_goldens/cursor.py, tests/fixtures/runtime_goldens/devin.py, tests/fixtures/runtime_goldens/factory_droid.py, tests/fixtures/runtime_goldens/gemini_cli.py, tests/fixtures/runtime_goldens/goose.py, tests/fixtures/runtime_goldens/grok.py, tests/fixtures/runtime_goldens/mistral_vibe.py, tests/fixtures/runtime_goldens/openhands.py, tests/fixtures/runtime_goldens/tabnine.py, tests/fixtures/runtime_goldens/vscode_copilot.py, tests/fixtures/runtime_goldens/windsurf.py

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
conflicts in regenerated paths taken from PR #321: .chock/bin/claude_code.py, .chock/bin/codex_cli.py, .chock/bin/cursor.py, .chock/bin/devin.py, .chock/bin/gemini_cli.py, .chock/bin/grok.py, .chock/bin/tabnine.py, .chock/bin/vscode_copilot.py, .chock/bin/windsurf.py, tests/fixtures/runtime_goldens/antigravity.py, tests/fixtures/runtime_goldens/claude_code.py, tests/fixtures/runtime_goldens/codex_cli.py, tests/fixtures/runtime_goldens/cursor.py, tests/fixtures/runtime_goldens/devin.py, tests/fixtures/runtime_goldens/factory_droid.py, tests/fixtures/runtime_goldens/gemini_cli.py, tests/fixtures/runtime_goldens/goose.py, tests/fixtures/runtime_goldens/grok.py, tests/fixtures/runtime_goldens/mistral_vibe.py, tests/fixtures/runtime_goldens/openhands.py, tests/fixtures/runtime_goldens/tabnine.py, tests/fixtures/runtime_goldens/vscode_copilot.py, tests/fixtures/runtime_goldens/windsurf.py

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
conflicts in regenerated paths taken from PR #324: .chock/bin/claude_code.py, .chock/bin/codex_cli.py, .chock/bin/cursor.py, .chock/bin/devin.py, .chock/bin/gemini_cli.py, .chock/bin/grok.py, .chock/bin/tabnine.py, .chock/bin/vscode_copilot.py, .chock/bin/windsurf.py, tests/fixtures/runtime_goldens/antigravity.py, tests/fixtures/runtime_goldens/claude_code.py, tests/fixtures/runtime_goldens/codex_cli.py, tests/fixtures/runtime_goldens/cursor.py, tests/fixtures/runtime_goldens/devin.py, tests/fixtures/runtime_goldens/factory_droid.py, tests/fixtures/runtime_goldens/gemini_cli.py, tests/fixtures/runtime_goldens/goose.py, tests/fixtures/runtime_goldens/grok.py, tests/fixtures/runtime_goldens/mistral_vibe.py, tests/fixtures/runtime_goldens/openhands.py, tests/fixtures/runtime_goldens/tabnine.py, tests/fixtures/runtime_goldens/vscode_copilot.py, tests/fixtures/runtime_goldens/windsurf.py

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Render paths take main side; tests/test_guard_fail_to_ask.py keeps rc IR-9
deny-reason tests and main SR-4b tests.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Render paths take v1-runtime side. gates.py keeps rc SR-3 repo_paths
spellings with v1 SR-8a case_blind; toggle.py keeps rc HEAD-only toggle
with v1 toggle_state; protect __init__ keeps rc names helpers with v1 SR-4f
session-binding names.

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
…untime merge

Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>

This branch has not been deployed

No deployments
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