@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.
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-start.md +8 -7
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/hooks.json +22 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/remind-review-covers-head.sh +128 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/remind-untracked-background.sh +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_remind_review_covers_head.sh +104 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_remind_untracked_background.sh +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/ccl-skills.ts +8 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +6 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/development-completion.md +13 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +78 -126
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/wording-only-review.md +136 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +521 -32
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_compat.py +25 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_order.sh +30 -15
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +439 -19
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_update_review_plan_intent.sh +14 -7
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +6 -6
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/attention-budget-ratchet.md +1 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +48 -119
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-quickstart.md +9 -9
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/firing-point-placement.md +22 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/validation-and-landing.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check_review_evidence_present.py +122 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/contract-anchors.tsv +4 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/extraction_review_gate.sh +37 -8
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/register-firing-path-resolution.rb +102 -20
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_ai_coding_implementation_gates.sh +16 -27
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +3 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_review_evidence_present.sh +81 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_extraction_review_gate.sh +137 -279
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_resolution.sh +41 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh +49 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/SKILL.md +3 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/closeout-reread.md +40 -0
- package/dist/assets/release.json +72 -52
- package/package.json +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/review_ledger_binding.py +0 -1242
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_review_ledger_binding.sh +0 -978
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_extraction_review_state.sh +0 -1477
- 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 ("
|
|
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
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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"/*
|