claude-company 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/company/state/RESUME.md +67 -8
- package/company/state/STATUS.md +3 -1
- package/company/state/WORRIES.md +4 -1
- package/company/witnesses.json +28 -1
- package/package.json +2 -2
package/company/state/RESUME.md
CHANGED
|
@@ -14,6 +14,63 @@ witnesses/models/tests/audit. Owner acceptance recorded (DECISIONS #3).
|
|
|
14
14
|
|
|
15
15
|
## 2. Next actions, in order
|
|
16
16
|
|
|
17
|
+
00000. test-infra-fixes SHIPPED 2026-07-26 (PR #85 merged 65bd070).
|
|
18
|
+
Self-authored by the CEO in the main checkout, auditor verdict SHIP,
|
|
19
|
+
CI 9/9 green across ubuntu+macos x node 18/20/22. Integrated main
|
|
20
|
+
re-verified by the CEO: hooks 224, npm test 61/0, install 96/0, all
|
|
21
|
+
stamped. Ubuntu job log confirms `Ran 224 tests ... OK` - the 121
|
|
22
|
+
previously-invisible tests passed on their first ever CI run.
|
|
23
|
+
Two defects, both found while scoping the multi-session engagement:
|
|
24
|
+
(a) tests/hooks/run_tests.sh exec'd test_hooks.py directly, so CI ran
|
|
25
|
+
103 of 224 hook tests - the other 121, including ALL of
|
|
26
|
+
test_guard_provenance.py, never ran in CI. Now unittest discover
|
|
27
|
+
with -v (the -v preserves the per-test CI log lines that
|
|
28
|
+
unittest.main(verbosity=2) used to give).
|
|
29
|
+
(b) npm test was RED ON MAIN: tests/cli/test_cli.sh piped
|
|
30
|
+
`npm pack --dry-run --json` into JSON.parse, and npm 10.5.0 writes
|
|
31
|
+
the prepare lifecycle banner to STDOUT, so all 10 pack-manifest
|
|
32
|
+
assertions were dead (PASS 51 / FAIL 10). --silent fixes it;
|
|
33
|
+
--ignore-scripts does NOT. Auditor proved the packed file list is
|
|
34
|
+
byte-identical across npm 9/10/11 (91 files).
|
|
35
|
+
RELEASE FACTS CORRECTED 2026-07-26: v0.2.3 is ALREADY PUBLISHED on npm
|
|
36
|
+
(2026-07-25T16:17Z). Prior RESUME/STATUS claims that the registry sat
|
|
37
|
+
at 0.2.0 awaiting an owner tag were STALE - the owner had already
|
|
38
|
+
tagged and published. Registry versions: 0.1.0, 0.1.1, 0.2.0, 0.2.3.
|
|
39
|
+
Nothing needs publishing for the test-infra work: tests/ is not in the
|
|
40
|
+
pack list and company/briefs/** is excluded, so the tarball is
|
|
41
|
+
unchanged by it.
|
|
42
|
+
NEW P2 WORRY - the pack list excludes company/specs|briefs|
|
|
43
|
+
change-requests but NOT company/state, so company/state/{RESUME,STATUS,
|
|
44
|
+
WORRIES,DECISIONS}.md ship into every install. Verified against the
|
|
45
|
+
live 0.2.3 tarball: those four ARE in it. The runtime files
|
|
46
|
+
(costs.log, provenance-ledger.json, active-task.json, .cost-cursor.json,
|
|
47
|
+
gates.status) are untracked, so a CLEAN-CLONE publish leaves them out -
|
|
48
|
+
but publishing from a dirty working checkout WOULD leak them. Always
|
|
49
|
+
publish from a clean clone at the tag.
|
|
50
|
+
Next: multi-session-tasks (feature) - plan approved by the owner
|
|
51
|
+
2026-07-26 at ~/.claude/plans/flickering-painting-pony.md, core-only
|
|
52
|
+
scope. active-task.json becomes N entries; the provenance ledger stops
|
|
53
|
+
wiping itself on slug change. Phase 0 spec via product-manager first.
|
|
54
|
+
NEW P1 WORRY, directly in scope for that engagement: dispatched
|
|
55
|
+
worktree agents CANNOT COMMIT - guard_commit judges them to be on main
|
|
56
|
+
because the harness pins payload cwd to the main checkout. That turns
|
|
57
|
+
every delegated build into self-authored work needing an audit.
|
|
58
|
+
|
|
59
|
+
0000. spawn-depth-shipping SHIPPED 2026-07-23 (PR #83 merged 6061814,
|
|
60
|
+
closes #79-#82; witness W-029; brief archived pending next chore
|
|
61
|
+
pass - it is tracked at company/briefs/brief-spawn-depth-shipping.md
|
|
62
|
+
on main, move to shipped/ with the next closeout PR). CC 2.1.21
|
|
63
|
+
defaulted subagent spawn depth to 1 (flattens CEO->lead->dev);
|
|
64
|
+
template now ships env CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH="2" and
|
|
65
|
+
install/update merge env additively (user values win, non-dict env
|
|
66
|
+
replaced-safe, heredocs byte-identical 3587 chars). CEO independent
|
|
67
|
+
verification: 224/61/123 all green, own merge probes (pin "3"
|
|
68
|
+
survives, bare heals to "2"), risk low. This session armed via
|
|
69
|
+
settings.local.json; memory file spawn-depth-env-required.md saved.
|
|
70
|
+
guard_tests test_scope papercut hit a THIRD time (see WORRIES P2).
|
|
71
|
+
NOTE: not on npm until the release AFTER v0.2.2 - owner still owes
|
|
72
|
+
the v0.2.2 tag+publish (DECISIONS #12), then a v0.2.3 can carry
|
|
73
|
+
spawn-depth.
|
|
17
74
|
000. model-routing-arming SHIPPED 2026-07-22 (PR #77 merged cd07fb6,
|
|
18
75
|
closes #74-#76; acceptance DECISIONS #11; witnesses W-026 wiring
|
|
19
76
|
assertion / W-027 merge byte-identity / W-028 bare-builtin block).
|
|
@@ -22,14 +79,16 @@ witnesses/models/tests/audit. Owner acceptance recorded (DECISIONS #3).
|
|
|
22
79
|
certification (contradict/bare exit 2, match 0; dormancy probe:
|
|
23
80
|
Task|Agent group stripped -> --check exit 1 + fix-it). Worktree
|
|
24
81
|
and task branch removed; brief+spec archived to shipped/.
|
|
25
|
-
RELEASE 0.2.2
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
82
|
+
RELEASE 0.2.2 MERGED (PR #78, merge commit ad3dda8; task
|
|
83
|
+
release-0.2.2-closeout closed; audits recorded approved after the
|
|
84
|
+
verdict-parser workaround - see WORRIES P2). Integrated main green
|
|
85
|
+
+ stamped (223/61/111), registry sealed 27/27. AWAITING OWNER
|
|
86
|
+
BUTTONS ONLY: tag v0.2.2 at ad3dda8, push tag, npm publish from a
|
|
87
|
+
clean tag clone (memory: npm-publish-owner-only; registry still on
|
|
88
|
+
0.2.0 - both 0.2.1 and 0.2.2 unpublished until then). Next chore
|
|
89
|
+
pass: archive brief-release-0.2.2-closeout.md to shipped/, file
|
|
90
|
+
the guard_provenance verdict-parser issue and the guard_tests
|
|
91
|
+
test_scope-from-main issue from WORRIES. Near-miss worth
|
|
33
92
|
remembering: a .format arg mismatch made the wrong-override path
|
|
34
93
|
fail OPEN until the live replay caught it - pinned by
|
|
35
94
|
test_builtin_spawn_wrong_override_blocked.
|
package/company/state/STATUS.md
CHANGED
|
@@ -9,8 +9,10 @@ _Last updated: 2026-07-22 - model-routing-arming SHIPPED (PR #77 merged cd07fb6,
|
|
|
9
9
|
|
|
10
10
|
| Task | Class | Lead/Agent | State | Gates | Notes |
|
|
11
11
|
|---|---|---|---|---|---|
|
|
12
|
+
| test-infra-fixes | quick | CEO (self, audited) | SHIPPED 2026-07-26 (PR #85 merged 65bd070) | 224 hooks + 61 CLI + 96 install green on integrated main and stamped; CI 9/9 across ubuntu+macos x node 18/20/22; ubuntu log confirms "Ran 224 tests OK" | Two one-line test-infra defects. (1) CI ran 103 of 224 hook tests - run_tests.sh exec'd test_hooks.py directly, so 121 tests incl. all of test_guard_provenance never ran in CI. (2) npm test was RED on main - pack-manifest JSON parse broken by the npm 10.5.0 prepare banner on stdout, 10 dead assertions. Blocks everything downstream: a red local gate means no stamp, no commit. |
|
|
13
|
+
| multi-session-tasks | feature | not yet dispatched | SPEC READY - awaiting tracking issues then dispatch | - | active-task.json becomes N entries in one file so parallel sessions in one checkout stop overwriting each other; provenance ledger stops wiping itself on slug change. Plan approved by owner 2026-07-26, core-only scope. Phase 0 done: company/specs/spec-multi-session-tasks.md, 31 FRs / 11 BRs / 10 OQs, all fallbacks decided. PM caught a real hole in the approved plan: "ALL over non-hotfix entries" is vacuously TRUE on an empty list, which would have silently flipped guard_spec from block to ALLOW when no task is active - FR-MST-05 orders the empty check first. |
|
|
12
14
|
| spawn-depth-shipping | quick | developer | SHIPPED 2026-07-23 (PR #83 merged 6061814, closes #79-#82) | 224 hooks + 61 CLI + 123 engine green (dev AND CEO reruns); integrated main stamped | Template ships env CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=2; install/update merge env additively (user pin survives - proven); witness W-029. NOT yet on npm - registry still 0.2.0; owner has v0.2.2 tag+publish pending, and this lands in the NEXT release after that. |
|
|
13
|
-
| release-0.2.3 | release | CEO |
|
|
15
|
+
| release-0.2.3 | release | CEO | PUBLISHED 2026-07-25 - CLOSED | integrated main green + stamped; CI 9/9 | Registry latest = 0.2.3 (published 2026-07-25T16:17Z); tags v0.2.0-v0.2.3 all on origin. The earlier "AWAITING OWNER TAG" state was stale bookkeeping - verified 2026-07-26 against `npm view claude-company versions`. Published tarball carries company/state/{RESUME,STATUS,WORRIES,DECISIONS}.md but NOT the runtime state files. DECISIONS #12-#14. |
|
|
14
16
|
|
|
15
17
|
## Shipped (recent)
|
|
16
18
|
|
package/company/state/WORRIES.md
CHANGED
|
@@ -9,13 +9,16 @@ wave/merge; P3 is polish._
|
|
|
9
9
|
|
|
10
10
|
| P | Worry | What (one line) | CEO logic (one line) |
|
|
11
11
|
|---|---|---|---|
|
|
12
|
+
| P1 | dispatched worktree agents cannot commit at all | guard_commit.git_cwd prefers payload cwd, which the harness pins to the MAIN checkout; a developer in .claude/worktrees/<slug> on task/<slug> is judged to be on main and blocked as "commit on protected branch". Reproduced 2026-07-26 on task/ci-test-discovery; the agent correctly refused to evade and left its work staged | The #26 git_cwd fix only helps when the session cwd really is the worktree, which is never true for a dispatched subagent. Today's workaround is the CEO committing from the main checkout on the task branch, which converts every delegated build into self-authored work needing an audit - i.e. it silently defeats the delegation economics. Candidate fix: resolve the branch from the edited file's worktree, or accept a worktree path as proof of branch. Fold into the multi-session engagement |
|
|
13
|
+
| P2 | CI npm may hide what local npm catches | tests/cli/test_cli.sh pack-manifest assertions were fully dead locally on npm 10.5.0 (prepare banner on stdout corrupts the JSON) while CI stayed green - 10 assertions were failing on main and CI never said so | Fixed via --silent in test-infra-fixes; the general lesson is that a suite passing in CI is not evidence it passes for a contributor. Candidate: pin or report the npm version in the CI log |
|
|
12
14
|
| P2 | gates.config template-vs-local tension | On the product repo itself, tracked gates.config must stay placeholder (ships to installs) so stop_gate/guard_commit need uncommitted local wiring - a papercut every session | Consider gates.local.config override in run-gates.sh; candidate issue after wave 2 |
|
|
13
15
|
| P3 | costs.log accuracy limits | Multi-model stop intervals book tokens to the last model; sub-half-cent stops log est=$0.00 | Known limits from wave-1 report; revisit if spend reporting starts driving decisions |
|
|
14
16
|
| P2 | staging stales a provenance audit | work_hash includes diff --cached, so git add AFTER the auditor pass stales the audit even with identical content | Auditor worry #2: doc the order (stage, then audit, then commit) in ORCHESTRATOR step 7 wording next doctrine touch; operational for now |
|
|
15
17
|
| P3 | git -C evades guard_commit subcmd parse | guard_commit.git_subcmd treats -C <dir> as the subcommand token, so `git -C x commit` bypasses commit gates (pre-existing, Mode C inherits) | Anti-adversary, out of doctrine scope; candidate issue against guard_commit |
|
|
16
18
|
| P3 | Mode D lacks worktree-cwd exemption | Stop close-gate block message reads wrong if a worktree session ever gets an active-task.json (moot today - file is untracked) | Auditor worry #3; per-spec (mirrors stop_gate); revisit only if worktree sessions gain task state |
|
|
17
19
|
| P2 | session_start 60-line cap can hide digest | Saturated RESUME+STATUS could truncate the active-task + execution digest lines | Lead worry P2, inherited behavior; candidate tail-reservation tweak in session_start |
|
|
18
|
-
|
|
|
20
|
+
| P1 | provenance audit verdict parser is substring-naive | guard_provenance.py:487 records the negative verdict if that literal phrase appears ANYWHERE in the audit payload - including the CEO's own dispatch prompt. Hit 3x on release-0.2.2, then a 4th time on test-infra-fixes where it BLOCKED the commit twice against two passing audits | Raised to P1: it now costs real dispatches, and the trap is near-inevitable because naming the verdict vocabulary is the natural way to prompt an auditor. PROVEN WORKAROUND: give the auditor a vocabulary that cannot poison the record (SHIP / SHIP-WITH-FIXES / HALT) and forbid it from emitting the negative token. Real fix: anchor the parse to the response's verdict line. Fold the vocabulary change into .claude/agents/auditor.md so no CEO has to remember it |
|
|
21
|
+
| P2 | SendMessage-resumed audits record no provenance | Only Task/Agent spawns fire the PostToolUse event that writes an audit into the ledger. Continuing an auditor via SendMessage produces a real audit that the ledger never sees, so the commit stays blocked and the reason looks wrong | Found on test-infra-fixes after two resumed rounds counted for nothing. Doctrine fix is cheap: a re-audit must be a fresh dispatch, never a resume. Candidate: say so in ORCHESTRATOR step 7 |
|
|
19
22
|
| P2 | guard_tests resolves test_scope from main checkout | Worktree builders cannot commit brief-granted test edits until the CEO sets test_scope in MAIN's active-task.json - has now blocked two workstreams (cli-update, model-routing-arming) | Candidate fix: resolve test_scope from the target worktree, or dispatch protocol sets it whenever a brief grants test dirs; follow-up brief |
|
|
20
23
|
| P3 | models.json merge is now a THIRD duplicated heredoc | install.sh/update.sh byte-identical coupling grew (settings, CLAUDE block, now models.json builtins) - divergence risk compounds | Same root cause as existing heredoc row; the byte-identity witness candidate (lead proposal 3) mitigates; fold into any future extraction task |
|
|
21
24
|
| P2 | update.sh duplicates install.sh merge heredocs | The three merges (settings/mcp/CLAUDE block) + CC_BLOCK are copied verbatim; a future install.sh merge change silently diverges update | cli-update lead worry; candidate fixture test asserting install and update produce identical merges; extraction forbidden this pass by additive-only brief |
|
package/company/witnesses.json
CHANGED
|
@@ -244,7 +244,34 @@
|
|
|
244
244
|
"regex": false,
|
|
245
245
|
"why": "Bare builtin-spawn BLOCK path - regression means built-in spawns silently inherit the session model (the live incident)",
|
|
246
246
|
"added_at": "2026-07-22T15:24:05Z"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"id": "W-029",
|
|
250
|
+
"task": "spawn-depth-shipping",
|
|
251
|
+
"file": ".claude/settings.json",
|
|
252
|
+
"must_contain": "CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH",
|
|
253
|
+
"regex": false,
|
|
254
|
+
"why": "Auto-update-era guard: template must ship spawn depth 2 or every install silently flattens to depth 1 on the next Claude Code",
|
|
255
|
+
"added_at": "2026-07-22T18:50:20Z"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"id": "W-030",
|
|
259
|
+
"task": "test-infra-fixes",
|
|
260
|
+
"file": "tests/hooks/run_tests.sh",
|
|
261
|
+
"must_contain": "unittest discover",
|
|
262
|
+
"regex": false,
|
|
263
|
+
"why": "CI calls this runner; reverting to a direct exec silently drops CI from 224 hook tests back to 103 with no other symptom",
|
|
264
|
+
"added_at": "2026-07-26T17:30:00Z"
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"id": "W-031",
|
|
268
|
+
"task": "test-infra-fixes",
|
|
269
|
+
"file": "tests/cli/test_cli.sh",
|
|
270
|
+
"must_contain": "--json --silent",
|
|
271
|
+
"regex": false,
|
|
272
|
+
"why": "Without --silent the npm prepare banner corrupts the pack JSON and all 10 pack-manifest assertions die as false MISSING, turning the local gate red",
|
|
273
|
+
"added_at": "2026-07-26T17:30:00Z"
|
|
247
274
|
}
|
|
248
275
|
],
|
|
249
|
-
"checksum": "
|
|
276
|
+
"checksum": "a2bf1d5ece833826945887fde2d32814011ffa242c6916cd31fa05cfab5c3d17"
|
|
250
277
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-company",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "An AI software company you drop into your repo - hierarchical, hard-gated SDLC for Claude Code",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "redomic",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
23
|
-
"url": "
|
|
23
|
+
"url": "https://github.com/devmesh-in/claude-company"
|
|
24
24
|
},
|
|
25
25
|
"homepage": "https://github.com/devmesh-in/claude-company",
|
|
26
26
|
"scripts": {
|