mathias and Claude Opus 5.5
ae50501ba3
fix(tools): reject case-variant arg keys and ref-shaped branch names
...
parseArgs now refuses, before any request: two keys equal under
strings.EqualFold in any object (exact duplicates included), and a
top-level key that differs from a schema field only in case. Without
this, encoding/json's case-insensitive last-wins match let
{"branch":"feat/x","Branch":"main"} write to main while a client-side
hook read feat/x.
file_write_branch (branch) and tbd_ship (branch and base) validate the
branch name: ^[A-Za-z0-9][A-Za-z0-9._/-]*$ plus no refs/ prefix, HEAD,
"..", "//", "/.", trailing "/" or ".", or ".lock". refs/heads/main
otherwise created refs/heads/refs/heads/main and wedged API writes to
main. tbd_ship's base is the protection-probe key, so a refs/-prefixed
base would also have read as unprotected.
Closes #65
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 06:58:31 +02:00
..
2026-07-03 22:48:26 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-07 11:29:05 +02:00
2026-07-22 08:31:43 +02:00
2026-07-07 00:33:39 +02:00
2026-07-22 08:31:43 +02:00
2026-07-04 13:49:38 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-09-05 14:42:59 +02:00
2026-10-05 06:58:31 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-04 13:57:05 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-04 13:44:14 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:57:24 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-04 13:44:14 +02:00
2026-07-04 13:44:14 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-04 09:00:07 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-10-05 06:58:31 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-04 00:40:02 +02:00
2026-07-04 08:30:30 +02:00
2026-10-05 06:58:31 +02:00
2026-10-05 06:58:31 +02:00
2026-07-03 22:48:26 +02:00
2026-09-05 12:40:34 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00
2026-07-03 22:48:26 +02:00
2026-07-22 08:31:43 +02:00