@ccoalm/ccl-skills 0.7.0 → 0.8.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/README.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/SKILL.md +8 -7
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/mobile-quality-release.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +16 -17
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/client-routing.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +195 -7
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/timeout-auth-and-capabilities.md +3 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/claude_review.sh +13 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/codex_review.sh +9 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_review.sh +9 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/normalize_review_timeout.sh +22 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/opencode_review.sh +9 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +1540 -129
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_claude_review_probe.sh +8 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_compat.py +76 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +1858 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_update_review_plan_intent.sh +789 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/update_review_plan_intent.py +513 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/SKILL.md +4 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/SKILL.md +2 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/SKILL.md +11 -10
- package/dist/assets/marketplace/plugins/ccl-skills/skills/nodejs-service-dev/SKILL.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/nodejs-service-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/nodejs-service-dev/references/async-lifecycle-and-performance.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/nodejs-service-dev/references/runtime-and-project-contract.md +58 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/nodejs-service-dev/references/source-map.md +41 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/nodejs-service-dev/references/verification-diagnostics-and-security.md +63 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +8 -10
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-routing-and-readiness.md +10 -14
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/verify-developer-experience.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/SKILL.md +135 -86
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/behavioral-aesthetic-logic.md +66 -80
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/delivery-contract.md +275 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-execution-checklist.md +88 -214
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-impl-naming-and-versioning.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-intake-and-acceptance.md +10 -8
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-system-source-of-truth.md +4 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/external-ui-ux-quality-benchmarks.md +112 -95
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/frontend-code-evidence-map.md +30 -21
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/interaction-design-patterns.md +22 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/layout-recipes-and-screenshot-acceptance.md +20 -17
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-project-token-consistency.md +7 -9
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-stack-strategy.md +14 -10
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/operational-processing-workflows.md +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/platform-mobile-patterns.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-lifecycle-acceptance-and-iteration.md +9 -6
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-surface-patterns.md +3 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/source-map.md +37 -10
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/tokens-and-components.md +7 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-audit.md +8 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-design-development.md +16 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/visual-craft.md +4 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/SKILL.md +4 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +4 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +95 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-quickstart.md +11 -9
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/r0-leakage-audit.md +102 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +54 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-to-skill-extraction.md +8 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-judgment-extraction.md +6 -6
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/validation-and-landing.md +4 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-ccl-skills.sh +69 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/extraction_review_gate.sh +22 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/impact-chain-gate.rb +49 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/obligation-ledger.py +2748 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/register-firing-path-resolution.rb +20 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/shared_git_surface_gate.py +1142 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_skill_catalog.sh +41 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_ci_checkout_ref_binding.sh +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_entrypoint_domain_scan_terms.sh +82 -8
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_extraction_review_gate.sh +336 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_self_adjudication.sh +82 -10
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_obligation_ledger.sh +1416 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_obligation_ledger_repo_audit.sh +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh +141 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_routing_pointer_integrity.sh +3 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_shared_git_surface_gate.sh +1696 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_uiux_delivery_contract.sh +2117 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_uiux_loading_budget.sh +316 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_extraction_review_state.sh +1176 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_cross_refs.sh +31 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate-skill.sh +9 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate_extraction_review_state.py +980 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/SKILL.md +8 -6
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/SKILL.md +8 -7
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/client-runtime-test-matrices.md +10 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/SKILL.md +6 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/complex-workspace-patterns.md +1 -1
- package/dist/assets/release.json +175 -70
- package/package.json +1 -1
|
@@ -1885,6 +1885,7 @@ PY
|
|
|
1885
1885
|
# the skill tree. The runtime-surface classifier must be present there too.
|
|
1886
1886
|
mkdir -p "$tmp_dir/harness/scripts"
|
|
1887
1887
|
cp "$script_dir/claude_review.sh" "$tmp_dir/harness/scripts/"
|
|
1888
|
+
cp "$script_dir/normalize_review_timeout.sh" "$tmp_dir/harness/scripts/"
|
|
1888
1889
|
cp "$script_dir/run_claude_capture.py" "$tmp_dir/harness/scripts/"
|
|
1889
1890
|
cp "$script_dir/parse_review_json.py" "$tmp_dir/harness/scripts/"
|
|
1890
1891
|
cp "$script_dir/parse_probe_result.py" "$tmp_dir/harness/scripts/"
|
|
@@ -1901,6 +1902,7 @@ PY
|
|
|
1901
1902
|
# When the runtime classifier is absent, both review and challenge fail closed.
|
|
1902
1903
|
mkdir -p "$tmp_dir/harness-no-runtime-parser/scripts"
|
|
1903
1904
|
cp "$script_dir/claude_review.sh" "$tmp_dir/harness-no-runtime-parser/scripts/"
|
|
1905
|
+
cp "$script_dir/normalize_review_timeout.sh" "$tmp_dir/harness-no-runtime-parser/scripts/"
|
|
1904
1906
|
cp "$script_dir/run_claude_capture.py" "$tmp_dir/harness-no-runtime-parser/scripts/"
|
|
1905
1907
|
cp "$script_dir/parse_review_json.py" "$tmp_dir/harness-no-runtime-parser/scripts/"
|
|
1906
1908
|
cp "$script_dir/classify_envelope.py" "$tmp_dir/harness-no-runtime-parser/scripts/"
|
|
@@ -1927,11 +1929,11 @@ done
|
|
|
1927
1929
|
|
|
1928
1930
|
# Other local harness helpers are integrity inputs too; their absence must stop
|
|
1929
1931
|
# instead of being laundered into an eligible provider fallback.
|
|
1930
|
-
for missing_helper in run_claude_capture.py classify_envelope.py parse_review_json.py; do
|
|
1932
|
+
for missing_helper in normalize_review_timeout.sh run_claude_capture.py classify_envelope.py parse_review_json.py; do
|
|
1931
1933
|
helper_slug="${missing_helper%.py}"
|
|
1932
1934
|
helper_dir="$tmp_dir/harness-no-$helper_slug/scripts"
|
|
1933
1935
|
mkdir -p "$helper_dir"
|
|
1934
|
-
for helper in claude_review.sh run_claude_capture.py parse_review_json.py parse_probe_result.py classify_envelope.py; do
|
|
1936
|
+
for helper in claude_review.sh normalize_review_timeout.sh run_claude_capture.py parse_review_json.py parse_probe_result.py classify_envelope.py; do
|
|
1935
1937
|
[ "$helper" = "$missing_helper" ] || cp "$script_dir/$helper" "$helper_dir/"
|
|
1936
1938
|
done
|
|
1937
1939
|
set +e
|
|
@@ -1951,7 +1953,10 @@ payload = json.load(open(sys.argv[2], encoding="utf-8"))
|
|
|
1951
1953
|
assert payload["mode"] == "review", payload
|
|
1952
1954
|
assert payload["status"] == "inconclusive", payload
|
|
1953
1955
|
assert helper in payload["reason"], payload
|
|
1954
|
-
|
|
1956
|
+
expected_reason_code = (
|
|
1957
|
+
"local_tool_failure" if helper == "normalize_review_timeout.sh" else "policy_denied"
|
|
1958
|
+
)
|
|
1959
|
+
assert payload["reason_code"] == expected_reason_code, payload
|
|
1955
1960
|
assert payload["fallback_eligible"] is False, payload
|
|
1956
1961
|
assert payload["next_action"] == "stop_reviewer_lane", payload
|
|
1957
1962
|
PY
|
|
@@ -5,7 +5,10 @@ from __future__ import annotations
|
|
|
5
5
|
|
|
6
6
|
import argparse
|
|
7
7
|
import importlib.util
|
|
8
|
+
import json
|
|
9
|
+
import os
|
|
8
10
|
from pathlib import Path
|
|
11
|
+
import subprocess
|
|
9
12
|
import sys
|
|
10
13
|
import tempfile
|
|
11
14
|
import unittest
|
|
@@ -420,7 +423,8 @@ class ReviewClientCompatibilityTest(unittest.TestCase):
|
|
|
420
423
|
def test_kimi_bounds_inline_argv_exposure_and_file_backs_large_packets(self) -> None:
|
|
421
424
|
wrapper = (SCRIPT_DIR / "kimi_review.sh").read_text(encoding="utf-8")
|
|
422
425
|
|
|
423
|
-
self.assertIn('
|
|
426
|
+
self.assertIn('. "$SCRIPT_DIR/normalize_review_timeout.sh"', wrapper)
|
|
427
|
+
self.assertIn('TIMEOUT="$(normalize_review_timeout "$TIMEOUT")"', wrapper)
|
|
424
428
|
self.assertIn("visible in process argv", wrapper)
|
|
425
429
|
self.assertIn("MAX_INLINE_PROMPT_BYTES=16000", wrapper)
|
|
426
430
|
self.assertIn('[ "$FORMAL_TIMEOUT" -le 120 ] || FORMAL_TIMEOUT=120', wrapper)
|
|
@@ -429,6 +433,77 @@ class ReviewClientCompatibilityTest(unittest.TestCase):
|
|
|
429
433
|
self.assertIn('--agent-file "$AGENT_FILE"', wrapper)
|
|
430
434
|
self.assertIn("mcp__code_review_packet__read_packet", wrapper)
|
|
431
435
|
|
|
436
|
+
def test_every_wrapper_guards_the_shared_timeout_normalizer(self) -> None:
|
|
437
|
+
for wrapper_name in (
|
|
438
|
+
"claude_review.sh",
|
|
439
|
+
"codex_review.sh",
|
|
440
|
+
"kimi_review.sh",
|
|
441
|
+
"opencode_review.sh",
|
|
442
|
+
):
|
|
443
|
+
with self.subTest(wrapper=wrapper_name):
|
|
444
|
+
wrapper = (SCRIPT_DIR / wrapper_name).read_text(encoding="utf-8")
|
|
445
|
+
if wrapper_name == "claude_review.sh":
|
|
446
|
+
guard = '[ -f "$script_dir/normalize_review_timeout.sh" ]'
|
|
447
|
+
source = '. "$script_dir/normalize_review_timeout.sh"'
|
|
448
|
+
missing_contract = (
|
|
449
|
+
'emit_inconclusive_payload "Claude review helper missing: '
|
|
450
|
+
'normalize_review_timeout.sh" local_tool_failure false '
|
|
451
|
+
"stop_reviewer_lane"
|
|
452
|
+
)
|
|
453
|
+
missing_contracts = (missing_contract,)
|
|
454
|
+
else:
|
|
455
|
+
guard = '[ -f "$SCRIPT_DIR/normalize_review_timeout.sh" ]'
|
|
456
|
+
source = '. "$SCRIPT_DIR/normalize_review_timeout.sh"'
|
|
457
|
+
missing_contracts = (
|
|
458
|
+
"timeout_normalizer_missing",
|
|
459
|
+
"local_tool_failure false",
|
|
460
|
+
)
|
|
461
|
+
self.assertIn(guard, wrapper)
|
|
462
|
+
for missing_contract in missing_contracts:
|
|
463
|
+
self.assertIn(missing_contract, wrapper)
|
|
464
|
+
self.assertLess(wrapper.index(guard), wrapper.index(source))
|
|
465
|
+
|
|
466
|
+
def test_every_wrapper_rejects_below_minimum_timeout_at_runtime(self) -> None:
|
|
467
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
468
|
+
opencode = Path(temp_dir) / "opencode"
|
|
469
|
+
opencode.write_text("#!/bin/sh\nexit 99\n", encoding="utf-8")
|
|
470
|
+
opencode.chmod(0o755)
|
|
471
|
+
environment = {**os.environ, "PATH": f"{temp_dir}:{os.environ['PATH']}"}
|
|
472
|
+
for wrapper_name in (
|
|
473
|
+
"claude_review.sh",
|
|
474
|
+
"codex_review.sh",
|
|
475
|
+
"kimi_review.sh",
|
|
476
|
+
"opencode_review.sh",
|
|
477
|
+
):
|
|
478
|
+
with self.subTest(wrapper=wrapper_name):
|
|
479
|
+
command = ["bash", str(SCRIPT_DIR / wrapper_name)]
|
|
480
|
+
if wrapper_name == "claude_review.sh":
|
|
481
|
+
command.append("review")
|
|
482
|
+
elif wrapper_name == "opencode_review.sh":
|
|
483
|
+
command.extend(("--implementer-family", "openai"))
|
|
484
|
+
command.extend(("--timeout", "4"))
|
|
485
|
+
completed = subprocess.run(
|
|
486
|
+
command,
|
|
487
|
+
check=False,
|
|
488
|
+
capture_output=True,
|
|
489
|
+
text=True,
|
|
490
|
+
env=environment,
|
|
491
|
+
)
|
|
492
|
+
self.assertEqual(completed.returncode, 2, completed.stderr)
|
|
493
|
+
payload = json.loads(completed.stdout)
|
|
494
|
+
self.assertEqual(payload["status"], "inconclusive")
|
|
495
|
+
self.assertEqual(payload["reason_code"], "invalid_input")
|
|
496
|
+
expected_reason = (
|
|
497
|
+
"--timeout must be an integer of at least 5 seconds"
|
|
498
|
+
if wrapper_name == "claude_review.sh"
|
|
499
|
+
else "invalid_timeout"
|
|
500
|
+
)
|
|
501
|
+
self.assertEqual(payload["reason"], expected_reason)
|
|
502
|
+
eligibility = payload.get(
|
|
503
|
+
"fallback_eligible", payload.get("cascade_eligible")
|
|
504
|
+
)
|
|
505
|
+
self.assertFalse(eligibility)
|
|
506
|
+
|
|
432
507
|
|
|
433
508
|
if __name__ == "__main__":
|
|
434
509
|
unittest.main()
|