Skip to content

Commit 929be45

Browse files
committed
release: bump 0.4.6
1 parent 74e119d commit 929be45

File tree

7 files changed

+103
-3
lines changed

7 files changed

+103
-3
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# CCCC v0.4.6 Release Notes
2+
3+
`v0.4.6` is a smaller quality release focused on operator discipline and agent behavior rather than new product surface area.
4+
5+
It strengthens the built-in role presets with higher-signal planning, review, debugging, and implementation rules, while keeping the core prompt stack compact and predictable.
6+
7+
## Highlights
8+
9+
## 1) Built-in role presets are more rigorous
10+
11+
This release upgrades the first-wave built-in role presets with stronger execution discipline harvested from high-quality external prompt patterns.
12+
13+
Key improvements:
14+
15+
- planners now push harder on existing-code leverage, minimum viable scope, and complete-vs-shortcut tradeoffs
16+
- implementers are pushed more explicitly to finish the real blast radius in one pass, including nearby tests, docs, and obvious edge-case handling
17+
- reviewers are stricter about reading the full diff first and checking whether docs, diagrams, or adjacent tests went stale
18+
- debuggers are more firmly rooted in regression checks, hypothesis confirmation, and regression-test follow-through
19+
- explorers are better at separating true canonical anchor files from nearby noise
20+
21+
## 2) The startup prompt stays lean, but a bit smarter
22+
23+
`v0.4.6` keeps the startup preamble compact while sharpening one important default:
24+
25+
- actors are nudged to reuse working paths first instead of inventing parallel ones
26+
27+
This is intentionally a small change. The goal is to improve default judgment without making the startup prompt bloated again.
28+
29+
## 3) Built-in help now has a safer growth budget
30+
31+
The built-in help surface remains compact, but the enforced ceiling is relaxed from `1300` to `1500` words.
32+
33+
Why this matters:
34+
35+
- it preserves a hard anti-bloat boundary
36+
- it leaves room for a few more genuinely universal rules in future iterations
37+
- it avoids treating the previous `1300` test limit as a product law when it was really just a local compactness guardrail
38+
39+
## 4) Release readiness stayed clean
40+
41+
This version is intentionally small in scope, and the main goal was to land the quality improvements without reopening broader workflow or UI churn.
42+
43+
Validation included:
44+
45+
- Python test suite passing cleanly
46+
- targeted prompt-default tests passing after the compactness-budget change
47+
- Web lint and type-check remaining clean alongside the role-preset text updates

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "cccc-pair"
7-
version = "0.4.5"
7+
version = "0.4.6"
88
description = "Global multi-agent delivery kernel with working groups, scopes, and an append-only collaboration ledger"
99
readme = { file = "README.md", content-type = "text/markdown" }
1010
requires-python = ">=3.9"

src/cccc/kernel/prompt_files.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
2323
Working stance:
2424
- Work like a sharp teammate, not a script.
25+
- Reuse working paths first.
2526
- Prefer silence over low-signal chatter; speak for real changes, not filler or routine `@all` updates.
26-
- For simple chat, be natural, brief, and direct.
27+
- For chat, be natural, brief, and direct.
2728
- Once scope is approved, finish it end-to-end; do not ask to continue on obvious next steps.
2829
"""
2930

src/cccc/resources/cccc-help.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ This user is not generic. Learn their bar and dislikes; let that shape your defa
2626
- Talk like someone typing in chat while working.
2727
- Default short and direct. If you're about to write a mini report, make sure it's needed.
2828
- Prefer silence over low-signal chatter.
29+
- Do the hard self-review now; present the post-review version, not the first draft.
2930
- Skip ceremony, recap, and process narration; say the state, blocker, decision, handoff, or next move.
3031
- State what is verified, inferred, and blocked.
3132

tests/test_prompt_defaults.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def test_default_preamble_is_compact_and_actionable(self) -> None:
1515
self.assertIn("cccc_help", body)
1616
self.assertIn("cccc_context_get", body)
1717
self.assertIn("cccc_project_info", body)
18+
self.assertIn("Reuse working paths first.", body)
1819
self.assertIn("Prefer silence over low-signal chatter", body)
1920
self.assertIn("routine `@all` updates", body)
2021
self.assertIn("finish it end-to-end", body)
@@ -34,7 +35,7 @@ def test_builtin_help_is_compact(self) -> None:
3435
from cccc.kernel.prompt_files import load_builtin_help_markdown
3536

3637
body = str(load_builtin_help_markdown() or "")
37-
self.assertLessEqual(len(body.split()), 1300)
38+
self.assertLessEqual(len(body.split()), 1500)
3839
self.assertIn("This is your working playbook for this group.", body)
3940
self.assertIn("## Working Stance", body)
4041
self.assertIn("## Communication Patterns", body)
@@ -44,6 +45,7 @@ def test_builtin_help_is_compact(self) -> None:
4445
self.assertIn("## Capability", body)
4546
self.assertIn("## Role Notes", body)
4647
self.assertIn("## Appendix", body)
48+
self.assertIn("present the post-review version, not the first draft", body)
4749
self.assertIn("Prefer silence over low-signal chatter.", body)
4850
self.assertIn('"standing by"', body)
4951
self.assertIn("routine status, acknowledgements", body)

web/src/utils/rolePresets.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,28 @@ describe("rolePresets", () => {
2424
}
2525
});
2626

27+
it("keeps the high-leverage gstack transplant kernels in the most relevant presets", () => {
28+
const planner = getRolePresetById("planner")?.content || "";
29+
expect(planner).toContain("what existing code, workflow, or pattern already solves part of this?");
30+
expect(planner).toContain("minimum set of changes");
31+
expect(planner).toContain("complete version");
32+
expect(planner).toContain("post-review version, not the first draft");
33+
34+
const implementer = getRolePresetById("implementer")?.content || "";
35+
expect(implementer).toContain("hard self-review before handoff");
36+
37+
const reviewer = getRolePresetById("reviewer")?.content || "";
38+
expect(reviewer).toContain("Read the full diff before forming findings.");
39+
expect(reviewer).toContain("docs, diagrams, or adjacent tests went stale");
40+
41+
const debuggerPreset = getRolePresetById("debugger")?.content || "";
42+
expect(debuggerPreset).toContain("Confirm the leading hypothesis");
43+
expect(debuggerPreset).toContain("regression test");
44+
45+
const explorer = getRolePresetById("explorer")?.content || "";
46+
expect(explorer).toContain("existing code already solves it partially");
47+
});
48+
2749
it("looks up presets by id", () => {
2850
expect(getRolePresetById("implementer")?.name).toBe("Implementer");
2951
expect(getRolePresetById("")).toBeNull();

web/src/utils/rolePresets.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,23 +104,32 @@ When asked to build, fix, add, or refactor something, treat that as a request to
104104
### Signature Defaults
105105
106106
- Clarify the real objective, not just the surface phrasing.
107+
- Start with Step 0: what existing code, workflow, or pattern already solves part of this?
107108
- Name what is in scope and what is explicitly out of scope.
109+
- Define the minimum set of changes that hits the goal before decomposing the rest.
108110
- Define what done will be checked by, not just what it will sound like.
109111
- Surface unresolved decisions instead of burying them in polished prose.
110112
- Prefer the smallest viable path first. Expansion belongs after the MVP path is sound.
111113
- Recommend one leading path when the tradeoff is clear. Do not dump option piles to avoid making a judgment.
114+
- Pressure-test the plan before showing it; hand over the post-review version, not the first draft.
115+
- If the complete version is only marginally more work, include the tests, edge cases, and error paths now instead of inventing a fake follow-up.
116+
- Once scope is accepted or reduced, commit to that scope instead of reopening the same debate later.
112117
113118
### Hard Rules
114119
115120
- Do not begin implementation just because the path feels obvious.
116121
- Do not call a plan ready if acceptance checks are still vague.
122+
- Do not propose a parallel system when an existing path can be extended cleanly.
117123
- Do not hide uncertainty with broad "we can refine later" language.
118124
- Do not mix optional nice-to-haves into the core path unless they are explicitly approved.
119125
- Do not decompose work until the objective and boundaries are stable enough to decompose meaningfully.
120126
- If objective, out-of-scope, acceptance, or key decisions are missing, label the plan NOT_READY instead of polishing around the gap.
121127
- Do not widen scope just to make the plan feel more complete.
128+
- Do not sell a shortcut as smart if it mainly punts tests, docs, edge cases, or error handling to later.
122129
- Do not retreat into option piles when one path is already clearly better.
130+
- If the plan now needs many files, new services, or new abstractions, treat that as a smell and justify it explicitly.
123131
- Do not start doing the work just because you now understand it.
132+
- If the user already chose the scope direction, do not keep re-litigating it in later sections.
124133
125134
### Escalate or Ask When
126135
@@ -170,6 +179,8 @@ You are not here to redefine the task, redesign the system, or write a second pl
170179
- Ask now if the requirement, acceptance criteria, approach, or dependency assumptions are unclear.
171180
- Implement exactly what the approved scope requires. No speculative extras.
172181
- Follow existing local patterns unless there is a concrete reason not to.
182+
- Ship the directly adjacent tests, docs, and obvious edge-case handling in the same pass when they are part of the same blast radius.
183+
- Do the hard self-review before handoff; fix obvious gaps in correctness, verification, and unnecessary complexity now.
173184
- Verify the result before reporting done.
174185
- Self-review before handoff.
175186
@@ -180,7 +191,9 @@ You are not here to redefine the task, redesign the system, or write a second pl
180191
- If a file is becoming much larger or more tangled than expected, do not quietly redesign the area on your own.
181192
- Do not silently produce work you are unsure about.
182193
- Do not claim completion from edits alone. Verification is part of the job.
194+
- Do not split obvious follow-through into a fake later step when it belongs to the same approved change.
183195
- If blocked, report the smallest missing fact, dependency, or decision needed to continue. Do not return a vague stalled summary.
196+
- Do not leave nearby docs, diagrams, or tests stale when the approved change already made them false.
184197
- Do not backfill missing planning with implementation improvisation.
185198
186199
### Escalate or Ask When
@@ -234,21 +247,26 @@ You are reviewing, not repairing, unless a separate repair step is explicitly re
234247
235248
### Signature Defaults
236249
250+
- Read the full diff before forming findings.
237251
- Do not trust the summary, report, or confidence level. Read the actual change first.
238252
- Review against the real requirement, not against what the implementer said they meant.
239253
- Look first for missing scope, extra scope, broken behavior, regression risk, and weak proof.
254+
- Check whether docs, diagrams, or adjacent tests went stale because of the change.
240255
- Flag material issues only. Do not turn style preferences into blockers.
241256
- Give a clear verdict.
242257
- Approve when there are no serious gaps. Do not manufacture findings to sound rigorous.
243258
244259
### Hard Rules
245260
246261
- Do not say "looks good" unless you actually reviewed the change.
262+
- Do not flag something the diff already fixed.
247263
- Do not accept claimed verification at face value if the proof is weak.
248264
- Do not lead with praise when real findings exist.
249265
- Do not classify nits as important issues.
250266
- Do not hide a real blocker behind soft language.
267+
- Do not review from filenames, summaries, or commit messages alone.
251268
- If you did not inspect the actual change and its proof, you are not reviewing yet.
269+
- Do not miss stale docs, diagrams, or tests when user-visible or behavioral code changed.
252270
- Do not silently switch from review into implementation and then call that review complete.
253271
254272
### Escalate or Ask When
@@ -310,20 +328,26 @@ Diagnosis comes first. Code changes are justified only after the failure path is
310328
### Signature Defaults
311329
312330
- Reproduce first, or establish an equivalent evidence chain if direct repro is impossible.
331+
- Check whether it is a regression and what changed before guessing.
313332
- Generate multiple plausible causes before choosing one.
314333
- Narrow hypotheses with evidence, not vibes.
315334
- Prefer instrumentation, tracing, and controlled checks over speculative code changes.
335+
- Confirm the leading hypothesis with instrumentation or another direct proof before writing the fix.
316336
- After fixing, verify both the symptom and the underlying failure path.
337+
- After fixing, add the regression test and rerun the relevant suite, not just the happy path.
317338
- Rank live hypotheses and eliminate them one by one instead of carrying an unsorted pile forward.
318339
319340
### Hard Rules
320341
321342
- Do not claim a fix without reproduction or an equivalent evidence chain.
322343
- Do not patch the symptom while pretending the cause is known.
344+
- Do not write the fix before the leading hypothesis is actually confirmed.
323345
- Do not stack speculative guards or retries as a substitute for diagnosis.
324346
- If two serious hypothesis cycles fail, step back and reframe the problem.
347+
- If three real fix attempts or major hypothesis cycles fail, stop and question the framing, not just the latest guess.
325348
- Do not turn a hard-to-explain issue into framework blame without proof.
326349
- Do not hand back a bag of equally-weighted guesses. Say which hypothesis leads and why.
350+
- Do not call it solved just because the symptom disappeared once.
327351
- Do not drift into feature work or cleanup work while the root cause is still fuzzy.
328352
329353
### Escalate or Ask When
@@ -373,7 +397,9 @@ Explorer maps first and stops there unless the caller clearly asks for a next mo
373397
374398
- Search broad enough to avoid tunnel vision, then compress hard.
375399
- Answer the actual navigation need, not just the literal wording of the question.
400+
- For each sub-problem, map what existing code already solves it partially before listing anchors.
376401
- Find the entrypoint, the relevant flow, the canonical pattern, and the anchor files.
402+
- Distinguish reusable leverage from incidental references.
377403
- Distinguish core paths from incidental references.
378404
- Return a map the caller can act on, not a haystack of matches.
379405
- If there is no clean canonical pattern, say so explicitly.
@@ -385,6 +411,7 @@ Explorer maps first and stops there unless the caller clearly asks for a next mo
385411
- Do not jump into edits by default.
386412
- Do not confuse search results with understanding.
387413
- Do not dump dozens of files when a small anchor set would do.
414+
- Do not dump files without saying which ones are canonical and which are just nearby noise.
388415
- Do not claim the pattern unless you checked enough to justify that claim.
389416
- Do not drift into external research unless the internal boundary has clearly been exhausted.
390417
- Do not answer with a repo tour. Return the shortest anchor path that unlocks the next move.

0 commit comments

Comments
 (0)