@ccoalm/ccl-skills 0.16.0 → 0.18.0

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.
Files changed (43) hide show
  1. package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-start.md +8 -7
  2. package/dist/assets/marketplace/plugins/ccl-skills/hooks/hooks.json +22 -0
  3. package/dist/assets/marketplace/plugins/ccl-skills/hooks/remind-review-covers-head.sh +128 -0
  4. package/dist/assets/marketplace/plugins/ccl-skills/hooks/remind-untracked-background.sh +53 -0
  5. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_remind_review_covers_head.sh +104 -0
  6. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_remind_untracked_background.sh +75 -0
  7. package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/ccl-skills.ts +8 -0
  8. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +6 -4
  9. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/development-completion.md +13 -1
  10. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +78 -126
  11. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/wording-only-review.md +136 -0
  12. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +521 -32
  13. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_compat.py +25 -2
  14. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_order.sh +30 -15
  15. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +439 -19
  16. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_update_review_plan_intent.sh +14 -7
  17. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/SKILL.md +1 -1
  18. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +1 -1
  19. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +6 -6
  20. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/attention-budget-ratchet.md +1 -0
  21. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +48 -119
  22. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-quickstart.md +9 -9
  23. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/firing-point-placement.md +22 -0
  24. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +18 -0
  25. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/validation-and-landing.md +2 -2
  26. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check_review_evidence_present.py +122 -0
  27. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/contract-anchors.tsv +4 -1
  28. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/extraction_review_gate.sh +37 -8
  29. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/register-firing-path-resolution.rb +102 -20
  30. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_ai_coding_implementation_gates.sh +16 -27
  31. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +3 -5
  32. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_review_evidence_present.sh +81 -0
  33. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_extraction_review_gate.sh +137 -279
  34. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_resolution.sh +41 -1
  35. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh +49 -3
  36. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/SKILL.md +3 -2
  37. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/closeout-reread.md +40 -0
  38. package/dist/assets/release.json +72 -52
  39. package/package.json +1 -1
  40. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/review_ledger_binding.py +0 -1242
  41. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_review_ledger_binding.sh +0 -978
  42. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_extraction_review_state.sh +0 -1477
  43. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate_extraction_review_state.py +0 -1183
@@ -20,9 +20,28 @@ from unittest import mock
20
20
 
21
21
 
22
22
  SCRIPT_DIR = Path(__file__).resolve().parent
23
+
24
+
25
+ def required_concerns(stage: str, *risk_tags: str) -> list[str]:
26
+ """The concern ids a plan owes, asked of the controller that enforces them.
27
+
28
+ A fixture holding its own copy of this list silently stops satisfying the gate
29
+ when the set changes, and the suite runner aborts at its first failing target,
30
+ so the drift surfaces rounds later. There is one owner; ask it.
31
+ """
32
+ argv = [sys.executable, str(SCRIPT_DIR / "review_gate.py"),
33
+ "--print-required-concerns", "--stage", stage]
34
+ for tag in risk_tags:
35
+ argv += ["--risk-tag", tag]
36
+ printed = subprocess.run(argv, capture_output=True, text=True, check=True).stdout.split()
37
+ assert printed, "the controller printed no required concerns"
38
+ return printed
23
39
  if str(SCRIPT_DIR) not in sys.path:
24
40
  sys.path.insert(0, str(SCRIPT_DIR))
25
41
  import review_gate
42
+
43
+ # The unpatched runner, for the controller's own git reads under the provider mock.
44
+ REAL_RUN = review_gate.run
26
45
  import kimi_packet_mcp
27
46
 
28
47
  SPEC = importlib.util.spec_from_file_location(
@@ -736,7 +755,7 @@ class CompletionFindingDispositionTest(unittest.TestCase):
736
755
  {"concern": concern,
737
756
  "conclusion": f"The synthetic completion fixture preserves {concern} boundaries.",
738
757
  "evidence_refs": ["fixture"]}
739
- for concern in ("correctness", "safety", "failure_paths", "tests_evidence", "compatibility")
758
+ for concern in required_concerns("build")
740
759
  ],
741
760
  "evidence": [{"id": "fixture", "result": "Synthetic exact-candidate completion and history fixture."}],
742
761
  })
@@ -781,7 +800,11 @@ class CompletionFindingDispositionTest(unittest.TestCase):
781
800
 
782
801
  def wrapper_result(self, command: list[str], **kwargs: object) -> subprocess.CompletedProcess:
783
802
  # Only the provider boundary is replaced. Packet, profile, chain and
784
- # completion validation execute normally; no subprocess is launched.
803
+ # completion validation execute normally, and so do the controller's own
804
+ # git reads (contract discovery, the local review receipt); no provider
805
+ # subprocess is launched.
806
+ if command[0] == "git":
807
+ return REAL_RUN(command, **kwargs)
785
808
  self.assertTrue(command[0].endswith("kimi_review.sh"), command[0])
786
809
  self.provider_calls.append(list(command))
787
810
  profile_path = Path(command[command.index("--review-profile-file") + 1])
@@ -47,7 +47,7 @@ case "$client" in
47
47
  codex) family=openai; provider=openai; model=codex-local-default ;;
48
48
  *) exit 2 ;;
49
49
  esac
50
- concern_results='[{"concern":"correctness","conclusion":"Checked routing correctness."},{"concern":"safety","conclusion":"Checked fail-closed safety."},{"concern":"failure_paths","conclusion":"Checked fallback failure paths."},{"concern":"tests_evidence","conclusion":"Checked deterministic test evidence."},{"concern":"compatibility","conclusion":"Checked client-order compatibility."}]'
50
+ concern_results='[{"concern":"correctness","conclusion":"Checked routing correctness."},{"concern":"safety","conclusion":"Checked fail-closed safety."},{"concern":"failure_paths","conclusion":"Checked fallback failure paths."},{"concern":"tests_evidence","conclusion":"Checked deterministic test evidence."},{"concern":"compatibility","conclusion":"Checked client-order compatibility."},{"concern":"claim_strength","conclusion":"Checked that no claim reaches past the client-order fixture."}]'
51
51
 
52
52
  if [ "$client" = "claude" ]; then
53
53
  case "$behavior" in
@@ -105,20 +105,35 @@ done
105
105
 
106
106
  printf 'diff --git a/x b/x\n--- a/x\n+++ b/x\n@@ -1 +1 @@\n-a\n+b\n' >"$WORK/diff.patch"
107
107
  printf 'diff --git a/c b/c\n--- a/c\n+++ b/c\n@@ -1 +1 @@\n-x\n+aws_key = "AKIAIOSFODNN7EXAMPLE"\n' >"$WORK/secret-diff.patch"
108
- cat >"$WORK/review-plan.json" <<'JSON'
109
- {
110
- "intent": "Preserve independent reviewer routing while adding staged review.",
111
- "acceptance": ["Client ordering and model-family exclusion remain deterministic."],
112
- "self_review": [
113
- {"concern": "correctness", "conclusion": "Routing preserves the first eligible independent result.", "evidence_refs": ["e1"]},
114
- {"concern": "safety", "conclusion": "Terminal boundaries remain fail closed across clients.", "evidence_refs": ["e1"]},
115
- {"concern": "failure_paths", "conclusion": "Candidate-local failures alone enter the fallback chain.", "evidence_refs": ["e1"]},
116
- {"concern": "tests_evidence", "conclusion": "Deterministic stubs cover client order and attribution.", "evidence_refs": ["e1"]},
117
- {"concern": "compatibility", "conclusion": "Existing client-order customization remains supported.", "evidence_refs": ["e1"]}
118
- ],
119
- "evidence": [{"id": "e1", "result": "Deterministic client routing contract fixture."}]
120
- }
121
- JSON
108
+ # The plan's required concern set has ONE owner. A fixture keeping its own copy
109
+ # stops satisfying the gate the moment that set changes, and the suite runner
110
+ # aborts at its first failing target, so the drift surfaces rounds later -- five
111
+ # fixtures drifted that way at once. Ask the controller instead.
112
+ python3 - "$WORK/review-plan.json" "$DIR" <<'PY'
113
+ import json
114
+ import subprocess
115
+ import sys
116
+ from pathlib import Path
117
+
118
+ plan_path, script_dir = Path(sys.argv[1]), Path(sys.argv[2])
119
+ required = subprocess.run(
120
+ [sys.executable, str(script_dir / "review_gate.py"),
121
+ "--print-required-concerns", "--stage", "build"],
122
+ capture_output=True, text=True, check=True,
123
+ ).stdout.split()
124
+ assert required, "the controller printed no required concerns"
125
+ plan_path.write_text(json.dumps({
126
+ "intent": "Preserve independent reviewer routing while adding staged review.",
127
+ "acceptance": ["Client ordering and model-family exclusion remain deterministic."],
128
+ "self_review": [
129
+ {"concern": concern,
130
+ "conclusion": f"The deterministic client-routing stubs cover {concern}.",
131
+ "evidence_refs": ["e1"]}
132
+ for concern in required
133
+ ],
134
+ "evidence": [{"id": "e1", "result": "Deterministic client routing contract fixture."}],
135
+ }, indent=2) + "\n", encoding="utf-8")
136
+ PY
122
137
 
123
138
  reset_case() {
124
139
  rm -f "$WORK/state"/*