@ccoalm/ccl-skills 0.15.0 → 0.15.2
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 +3 -1
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-start.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/ccl-skills.ts +80 -4
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-install-skills.md +16 -4
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/owner-dispatch.sh +13 -2
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/test.sh +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/SKILL.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +6 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/development-completion.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +37 -13
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/AGENTS.md +5 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/codex_review.sh +77 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_packet_mcp.py +98 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_cli_review.py +48 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +237 -17
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_cli_review_wrappers.sh +165 -11
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_kimi_packet_mcp.py +143 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_compat.py +572 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +65 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/SKILL.md +3 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/SKILL.md +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/nodejs-service-dev/SKILL.md +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/SKILL.md +7 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/alerting-and-on-call.md +8 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/SKILL.md +3 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/SKILL.md +16 -14
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/dual-sidecar-and-traffic-config-center.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/grpc-authority-workaround.md +40 -83
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/mesh-architecture.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/retry-timeout-circuit-breaker.md +44 -37
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-recipe.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +7 -7
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/delivery-lifecycle.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-review-gate-mechanics.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/pre-final-continuation-gate.md +20 -11
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/refactoring-discipline.md +7 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/SKILL.md +8 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +17 -17
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/external-practice-controls.md +3 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/harness-patterns-and-eval.md +4 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/resume-paused-delivery.md +3 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-golden-trace.rb +31 -7
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/impact-chain-gate.rb +74 -3
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/skill-behavior-eval.py +103 -21
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_ai_coding_implementation_gates.sh +83 -48
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_body_compliance_grading.sh +80 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_impact_chain_refscripts.sh +74 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_controlled_escalation_pins.sh +3 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_runtime.py +428 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_extraction_review_state.sh +190 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate_extraction_review_state.py +106 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/SKILL.md +3 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/SKILL.md +1 -1
- package/dist/assets/release.json +87 -67
- package/dist/claude-adapter.js +14 -7
- package/dist/codex-host.d.ts +2 -4
- package/dist/codex-host.js +40 -19
- package/dist/host-probe.d.ts +27 -0
- package/dist/host-probe.js +51 -0
- package/dist/opencode-adapter.js +24 -19
- package/dist/operations.js +34 -8
- package/dist/unified.d.ts +1 -1
- package/dist/unified.js +18 -9
- package/package.json +1 -1
|
@@ -247,7 +247,7 @@ def load(path: Path) -> tuple[dict[str, Any], Path]:
|
|
|
247
247
|
"finding_classes",
|
|
248
248
|
"unreviewed_delta",
|
|
249
249
|
"closeout_state",
|
|
250
|
-
},
|
|
250
|
+
} | ({"finding_dispositions"} if "finding_dispositions" in value else set()),
|
|
251
251
|
"ledger",
|
|
252
252
|
)
|
|
253
253
|
return payload, path.absolute().parent
|
|
@@ -451,7 +451,9 @@ def validate_controller_receipts(
|
|
|
451
451
|
finding, f"controller receipt {expected_index}.findings[{finding_index}]"
|
|
452
452
|
)
|
|
453
453
|
if finding_hash in current_finding_set:
|
|
454
|
-
|
|
454
|
+
# Raw receipts stay intact; repeated canonical payloads share
|
|
455
|
+
# this receipt's existing finding identity and first-seen order.
|
|
456
|
+
continue
|
|
455
457
|
current_finding_set.add(finding_hash)
|
|
456
458
|
current_findings.append(finding_hash)
|
|
457
459
|
if receipt["status"] == "passed" and findings:
|
|
@@ -544,8 +546,26 @@ def validate_completion_receipt(
|
|
|
544
546
|
or receipt.get("findings") != []
|
|
545
547
|
):
|
|
546
548
|
fail("completion receipt must be a passed self_reviewed complete result")
|
|
547
|
-
|
|
548
|
-
|
|
549
|
+
basis = receipt.get("completion_basis", "external_pass")
|
|
550
|
+
if basis == "external_pass":
|
|
551
|
+
if final.get("status") != "passed" or final.get("findings") != []:
|
|
552
|
+
fail("completion receipt cannot close a final external receipt with findings")
|
|
553
|
+
if receipt.get("finding_dispositions_sha256") is not None or receipt.get(
|
|
554
|
+
"resolved_finding_occurrences", []
|
|
555
|
+
) != []:
|
|
556
|
+
fail("external_pass completion cannot carry finding dispositions")
|
|
557
|
+
elif basis == "source_refuted_findings":
|
|
558
|
+
if (
|
|
559
|
+
len(receipts) < 2
|
|
560
|
+
or receipts[0].get("mode") != "review"
|
|
561
|
+
or final.get("mode") != "challenge"
|
|
562
|
+
or final.get("status") not in {"passed", "findings"}
|
|
563
|
+
or any(item.get("predecessor_chain_id") is not None for item in receipts)
|
|
564
|
+
or any(item.get("candidate_sha256") != final.get("candidate_sha256") for item in receipts)
|
|
565
|
+
):
|
|
566
|
+
fail("source_refuted completion requires a same-candidate review and challenge without succession")
|
|
567
|
+
else:
|
|
568
|
+
fail("completion receipt has an unknown completion_basis")
|
|
549
569
|
if receipt.get("review_chain_tracked") is not True or receipt.get("review_chain_id") != chain_id:
|
|
550
570
|
fail("completion receipt review_chain_id does not match the controller chain")
|
|
551
571
|
if receipt.get("challenge_budget") != WRAPPER_CHALLENGE_BUDGET or type(receipt.get("challenge_budget")) is not int:
|
|
@@ -584,6 +604,85 @@ def validate_completion_receipt(
|
|
|
584
604
|
return receipt
|
|
585
605
|
|
|
586
606
|
|
|
607
|
+
def validate_completion_dispositions(
|
|
608
|
+
payload: dict[str, Any],
|
|
609
|
+
ledger_dir: Path,
|
|
610
|
+
completion: dict[str, Any] | None,
|
|
611
|
+
receipt_hashes: list[str],
|
|
612
|
+
receipt_findings: dict[str, list[str]],
|
|
613
|
+
candidate: str,
|
|
614
|
+
) -> None:
|
|
615
|
+
if completion is None or completion.get("completion_basis") != "source_refuted_findings":
|
|
616
|
+
if "finding_dispositions" in payload:
|
|
617
|
+
fail("finding_dispositions requires a source_refuted_findings completion")
|
|
618
|
+
return
|
|
619
|
+
ref = exact_object(payload.get("finding_dispositions"), {"file", "sha256"}, "finding_dispositions")
|
|
620
|
+
raw = load_sibling(
|
|
621
|
+
ledger_dir,
|
|
622
|
+
file_value=ref["file"],
|
|
623
|
+
digest_value=ref["sha256"],
|
|
624
|
+
label="finding dispositions",
|
|
625
|
+
maximum=MAX_EVIDENCE_BYTES,
|
|
626
|
+
)
|
|
627
|
+
if completion.get("finding_dispositions_sha256") != ref["sha256"]:
|
|
628
|
+
fail("completion disposition digest does not match the bound finding_dispositions file")
|
|
629
|
+
document = exact_object(
|
|
630
|
+
decode_json(raw, label="finding dispositions"),
|
|
631
|
+
{"schema_version", "candidate_sha256", "review_result_sha256", "dispositions"},
|
|
632
|
+
"finding dispositions",
|
|
633
|
+
)
|
|
634
|
+
if type(document["schema_version"]) is not int or document["schema_version"] != 1:
|
|
635
|
+
fail("finding dispositions schema_version must be 1")
|
|
636
|
+
if sha256(document["candidate_sha256"], "finding dispositions.candidate_sha256") != candidate:
|
|
637
|
+
fail("finding dispositions are stale for the current candidate")
|
|
638
|
+
if document["review_result_sha256"] != receipt_hashes:
|
|
639
|
+
fail("finding dispositions must bind the full ordered controller receipts")
|
|
640
|
+
expected = [
|
|
641
|
+
{"receipt_sha256": receipt_hash, "finding_sha256": finding_hash}
|
|
642
|
+
for receipt_hash in receipt_hashes
|
|
643
|
+
for finding_hash in receipt_findings[receipt_hash]
|
|
644
|
+
]
|
|
645
|
+
if not expected:
|
|
646
|
+
fail("source_refuted completion requires at least one controller finding")
|
|
647
|
+
if completion.get("resolved_finding_occurrences") != expected:
|
|
648
|
+
fail("completion resolved_finding_occurrences must match the ordered controller findings")
|
|
649
|
+
dispositions = document["dispositions"]
|
|
650
|
+
if not isinstance(dispositions, list) or len(dispositions) != len(expected):
|
|
651
|
+
fail("finding dispositions must cover the full ordered controller findings")
|
|
652
|
+
class_occurrences = {
|
|
653
|
+
(item["receipt_sha256"], item["finding_sha256"]): item
|
|
654
|
+
for row in payload["finding_classes"]
|
|
655
|
+
for item in row["occurrences"]
|
|
656
|
+
}
|
|
657
|
+
for index, (value, expected_pair) in enumerate(zip(dispositions, expected)):
|
|
658
|
+
label = f"finding dispositions.dispositions[{index}]"
|
|
659
|
+
row = exact_object(value, {"receipt_sha256", "finding_sha256", "disposition", "evidence"}, label)
|
|
660
|
+
if any(row[key] != value for key, value in expected_pair.items()):
|
|
661
|
+
fail("finding dispositions must cover the full ordered controller findings")
|
|
662
|
+
occurrence = class_occurrences[(row["receipt_sha256"], row["finding_sha256"])]
|
|
663
|
+
if row["disposition"] != "source_refuted" or occurrence["disposition"] != "source_refuted":
|
|
664
|
+
fail("adjudicated completion permits only source_refuted finding occurrences")
|
|
665
|
+
evidence = row["evidence"]
|
|
666
|
+
if not isinstance(evidence, list) or not evidence:
|
|
667
|
+
fail(f"{label} requires a non-empty evidence array")
|
|
668
|
+
for evidence_index, item in enumerate(evidence):
|
|
669
|
+
bounded_text(item, f"{label}.evidence[{evidence_index}]", 1000)
|
|
670
|
+
if len(evidence) != len(set(evidence)):
|
|
671
|
+
fail(f"{label}.evidence contains duplicates")
|
|
672
|
+
# Class validation already binds this witness to the candidate, raw
|
|
673
|
+
# finding, and disposition. Require the complete checkpoint to use the
|
|
674
|
+
# same evidence; neither record authenticates its semantic truth.
|
|
675
|
+
witness = decode_json(load_sibling(
|
|
676
|
+
ledger_dir,
|
|
677
|
+
file_value=occurrence["disposition_evidence_file"],
|
|
678
|
+
digest_value=occurrence["disposition_evidence_sha256"],
|
|
679
|
+
label=f"{label} class disposition evidence",
|
|
680
|
+
maximum=MAX_EVIDENCE_BYTES,
|
|
681
|
+
), label=f"{label} class disposition evidence")
|
|
682
|
+
if evidence != witness["evidence"]:
|
|
683
|
+
fail(f"{label} does not match its class disposition evidence")
|
|
684
|
+
|
|
685
|
+
|
|
587
686
|
def validate_base_attestations(
|
|
588
687
|
payload: dict[str, Any],
|
|
589
688
|
ledger_dir: Path,
|
|
@@ -991,6 +1090,9 @@ def validate(payload: dict[str, Any], ledger_dir: Path) -> tuple[str, int, int]:
|
|
|
991
1090
|
any_unresolved = validate_finding_classes(
|
|
992
1091
|
payload, ledger_dir, receipt_findings, candidate, closeout
|
|
993
1092
|
)
|
|
1093
|
+
validate_completion_dispositions(
|
|
1094
|
+
payload, ledger_dir, completion, receipt_hashes, receipt_findings, candidate
|
|
1095
|
+
)
|
|
994
1096
|
|
|
995
1097
|
delta = payload["unreviewed_delta"]
|
|
996
1098
|
if not isinstance(delta, list):
|
|
@@ -5,7 +5,7 @@ description: CLI/terminal/console/PTY/ANSI/keyboard/TUI design, implementation,
|
|
|
5
5
|
|
|
6
6
|
# Terminal CLI Dev
|
|
7
7
|
|
|
8
|
-
Use this skill for terminal and command-line product surfaces. It owns the user-facing command/subcommand/flag/default/help/output/exit/action/confirmation/progress/recovery contract, plus implementation mechanics for text UIs, console workflows, ANSI-rendered output, PTY-backed interaction, keyboard input, terminal capability handling, and real terminal verification. A language skill may own parser or library mechanics, but those mechanics do not displace this user-visible contract. This skill does not own web browsers, mobile apps, mini-program hosts, backend services, or product design judgment.
|
|
8
|
+
Use this skill for terminal and command-line product surfaces. It owns the user-facing command/subcommand/flag/default/help/output/exit/action/confirmation/progress/recovery contract, plus implementation mechanics for text UIs, console workflows, ANSI-rendered output, PTY-backed interaction, keyboard input, terminal capability handling, and real terminal verification. A language skill may own parser or library mechanics, but those mechanics do not displace this user-visible contract. This skill does not own web browsers, mobile apps, mini-program hosts, backend services, or product design judgment. After code/test edits, self-check and invoke `code-review` automatically before completion.
|
|
9
9
|
|
|
10
10
|
## Routing
|
|
11
11
|
|
|
@@ -5,7 +5,9 @@ description: 怎么测 / 测试方案 / 测试覆盖 / 先写测试用例(可
|
|
|
5
5
|
|
|
6
6
|
# Testing Strategy
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Owns test scope/design, verification evidence, CI gates and test-layer choices across Go, Python, React web, mobile, mini-program, terminal/CLI/TUI, API, workflow, data/inference and release tasks.
|
|
9
|
+
|
|
10
|
+
- Code/test changes require self-checks; invoke `code-review` automatically before completion.
|
|
9
11
|
|
|
10
12
|
## Skill Routing
|
|
11
13
|
|
|
@@ -5,7 +5,7 @@ description: Use when designing, implementing, reviewing, debugging, testing, or
|
|
|
5
5
|
|
|
6
6
|
# Web React Dev
|
|
7
7
|
|
|
8
|
-
Use this skill for React web client engineering. It covers browser-rendered React applications, React components, routing, data fetching, forms, frontend API integration, accessibility, performance, build, and deploy checks. It does not own mini-program host behavior, Flutter, native mobile, backend service design, or visual design system rules.
|
|
8
|
+
Use this skill for React web client engineering. It covers browser-rendered React applications, React components, routing, data fetching, forms, frontend API integration, accessibility, performance, build, and deploy checks. It does not own mini-program host behavior, Flutter, native mobile, backend service design, or visual design system rules. After code/test edits, self-check and invoke `code-review` automatically before completion.
|
|
9
9
|
|
|
10
10
|
## Routing
|
|
11
11
|
|