@ccoalm/ccl-skills 0.7.0 → 0.9.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 +6 -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/manual-invocation-and-prompts.md +6 -0
- 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/defect-diagnosis/SKILL.md +1 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/SKILL.md +3 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/architecture-playbook.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/multi-tenant-isolation.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/SKILL.md +4 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/state-machine-task-patterns.md +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/SKILL.md +2 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/inference-capacity-operations.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/llm-client-gateway.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/model-prompt-evaluation.md +4 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/SKILL.md +11 -10
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/contracts-and-state.md +5 -0
- 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 +73 -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/platform-observability/SKILL.md +3 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/metrics-conventions.md +8 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/sli-slo-design.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/canary-and-rollout-strategy.md +16 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/promotion-gate-and-review.md +9 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +14 -16
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/code-review-checklist.md +4 -0
- 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-routing-and-readiness.md +10 -14
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/rd-standards-doc-family-checklist.md +1 -0
- 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 +6 -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 +3 -3
- 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 +8 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-audit.md +16 -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-architecture/references/multi-tenant-isolation.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/SKILL.md +4 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/state-machine-task-patterns.md +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/SKILL.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +8 -8
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/description-authoring.md +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +104 -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 +103 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-to-skill-extraction.md +20 -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/test-artifact-management/references/classical-test-design-techniques.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc-review-and-prioritization.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/update-lifecycle.md +2 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/SKILL.md +16 -15
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/ci-fixtures-and-flake-control.md +5 -1
- 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/testing-strategy/references/e2e-real-flow-testing.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/integration-contract-testing.md +10 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-code-authoring-patterns.md +2 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-topology-and-commands.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/SKILL.md +2 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/annotation-driven-revision.md +9 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/figure-and-table-craft.md +8 -2
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/SKILL.md +7 -5
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/complex-workspace-patterns.md +1 -1
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/react-architecture.md +3 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-quality-release.md +37 -4
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-ui-quality.md +10 -1
- package/dist/assets/release.json +215 -105
- package/package.json +1 -1
|
@@ -251,6 +251,14 @@ Rules:
|
|
|
251
251
|
- Do not count source-register or source-map text as the skill itself. Provenance proves where a rule came from; the owning skill/reference must still tell a future user how to apply, implement, test, or reject the rule without reading the provenance trail.
|
|
252
252
|
- **Reconcile the map against every upstream disposition surface before closeout — the map is a transcription, and transcriptions drop rows.** Walk every disposition surface still valid for the current scope — whichever round or session produced it (per-axis lesson tables, candidate ledger, a refined or replay-produced map; a cross-session resume inherits the prior round's surfaces, it does not reset them) — and list the surfaces actually reconciled: every row whose disposition carries a forward obligation — `routed`, `landed`, `updated`, `pending`, or any status naming an owner/output — must resolve to a map row (`updated`/`unchanged`/`routed`/`pending` with owner — a `pending` map row preserves the blocker per the existing pending rule instead of forcing a fake terminal status) or carry a superseded note that names the successor map row covering the same mechanism; derive the surface list from the round's own records (charter, source register, produced-artifact rows), not from memory — a disposition surface named in those records but absent from the reconciled list keeps the claim `interim` (wholesale omission of the records themselves is fabrication, out of scope for this gate and covered by the never-fabricate red line); only evidenced terminal rows (`discarded`/`no-new-lesson`/`not-applicable` with reason) need no map row, and a superseded note with no successor is `downgraded`/`pending`, not closure. A dispositioned row silently absent from the map blocks the complete claim — "diff matches map" then passes while the lesson is lost, which is the exact hole this check closes (observed shape: an axis table routed a craft lesson to two owners; the refined map omitted the row; the landing round verified diff-vs-map clean and shipped without it, caught only by user challenge).
|
|
253
253
|
|
|
254
|
+
## Member-Join Inheritance
|
|
255
|
+
|
|
256
|
+
The SKILL.md class-wide COMPLETE-set rule (example of a class-wide change: "every stack `*-dev`/`*-architecture` should advertise a localized-refactor trigger"; example of a member-pair landing: Python+Go) fires on change-side sweeps. This section is its join-side dual.
|
|
257
|
+
|
|
258
|
+
- When a NEW skill joins an already-swept class (e.g. a new stack `*-dev` joining the stack-implementation-owner class), enumerate the class-wide obligations its siblings already carry — advertised triggers, skip-leg reciprocity on routing counterparties, pinned pointer-integrity anchors, and bank fixtures — and inherit each, or record a per-obligation `not-applicable` reason, before the member lands.
|
|
259
|
+
- A sibling-generalization map that only answers the copied-content question ("does the new skill duplicate sibling text?") must not be counted as obligation-inheritance coverage; the two questions are independent, and the join-side miss survives a clean copied-content map.
|
|
260
|
+
- Validation: the closeout map lists each inherited obligation with a status, exactly as the change-side sweep lists each member. Failure shape: a new stack implementation owner landed with "siblings unchanged because the new skill routes to their existing contracts" while lacking the CLI carve-out reciprocity and the localized-refactor trigger pair its siblings carry; only independent review caught it.
|
|
261
|
+
|
|
254
262
|
## Capability Naming And Provenance
|
|
255
263
|
|
|
256
264
|
Use this when naming a new skill, naming a reference file, renaming an extracted artifact, or turning a source-specific pattern into reusable guidance.
|
|
@@ -669,3 +677,15 @@ Use these checks before treating a source-derived skill as ready:
|
|
|
669
677
|
- New skill: create only when the future user would naturally ask for a different task type.
|
|
670
678
|
- Reference file: use for detailed checklists, variants, examples, and source-derived heuristics.
|
|
671
679
|
- Script: use for repeatable validation, scanning, generation, or formatting that should be deterministic.
|
|
680
|
+
|
|
681
|
+
## Benchmark Verdict Discipline
|
|
682
|
+
|
|
683
|
+
For an external-pack / sibling-repo benchmark round (the `SKILL.md` benchmark Core Rule owns when this fires), the per-mechanism verdict table replaces impressionistic gap lists. Each source mechanism gets one row:
|
|
684
|
+
|
|
685
|
+
- **Verdict, four values**: `P` (we cover it correctly — requires a decision point, not just the concept named), `I` (covered but incomplete — name the missing branch), `M` (missing — but see the functional-equivalent check), `W` (we state it wrong — quote both sides with file:line and propose the fix).
|
|
686
|
+
- **Grep-anchored evidence**: every row carries the grep terms used against our tree; an `M` verdict requires the zero-hit grep recorded as replayable evidence — terms plus the exact command/mode, path scope, and baseline revision (`NO_HITS: <terms> @ <rev>`), because once the borrow lands, a replay against HEAD hits the landed rule itself; replay runs against the recorded baseline.
|
|
687
|
+
- **Functional-equivalent check before any `M` borrow**: a missing *name* is not a missing *capability* — search for what our tree does in that situation under other vocabulary; when an equivalent exists, the verdict is `P(功能等价)` or `I`, and the borrow shrinks to naming/linking value (usually low). This is the mechanical guard against borrowing-for-the-sake-of-alignment.
|
|
688
|
+
- **Borrowing degree** per `M`/`I`: high / medium / low, scored on one axis only — how much the mechanism changes an agent's actual decisions — never on how impressive the source text reads.
|
|
689
|
+
- **Disposition vocabulary**: beyond keep/merge/discard/route, two middle states are legitimate and prevent binary misjudgment — `待实验` (hypothesis worth testing: record the hypothesis, the experiment, and pass/fail criteria; do not land prose) and `条件化采纳` (adopt with explicit applicability conditions, disable conditions, and a fallback path recorded next to the rule).
|
|
690
|
+
- **Conflict synthesis, three shapes before choosing sides**: when the source contradicts our rule, first test whether the conflict is (a) a missing tier — both are right in different regimes, so merge by adding the regime split; (b) a missing ordering — both rules survive with an explicit precedence; (c) conflated authority — one side owns proposing and the other owns deciding, so split the powers. Only when none fits is it a genuine pick-one decision (keep the stricter per Conflict Resolution).
|
|
691
|
+
- **W-type internal-consistency sweep**: a mature skill tree's highest-yield audit is internal drift, not external comparison. The recurring W classes to grep for: an absolutized single-case rule (one scenario promoted to an unconditional "always/never"), same-name-different-meaning across files, translation/paraphrase drift between sibling-language files, a template violating its own stated hard rule, stale-era residue (rules about tools/versions no longer in the stack), a hard-coded value where a policy/parameter reference should be, and version-lagged claims about fast-moving vendors. Route wording-level dedup to `tighten-doc`; land each confirmed W as a fix with both sides cited.
|
|
@@ -86,7 +86,7 @@ Use source-specific judgment, but verify with concrete proxies:
|
|
|
86
86
|
- One primary visual focus per task state; secondary controls should not compete with the main artifact or decision.
|
|
87
87
|
- Use stable spacing rhythm such as 4/8px increments unless the source system clearly uses another rhythm.
|
|
88
88
|
- Record token provenance before extracting visual rules: the source of typography, primary color, neutral/background scale, radius, shadow/elevation, and component density. If the source has multiple plausible visual directions or the implementation code hardcodes page-level colors, treat that as extraction evidence and decide whether the reusable rule should require a visual direction comparison, token cleanup, or both.
|
|
89
|
-
- Touch targets should
|
|
89
|
+
- Touch targets should follow current first-party platform guidance. For buttons, preserve Apple HIG's general-rule hit region of at least 44×44pt (60×60pt on visionOS) and Android's at-least-48×48dp touch/focusable guidance as platform-scoped inputs, not universal constants; measure the actual hit region separately from the glyph.
|
|
90
90
|
- Text contrast should meet WCAG expectations for normal and small text; do not rely on brand color alone for state.
|
|
91
91
|
- Dense work surfaces should keep stable row/card height, fixed context when identity would be lost, and local overflow affordance instead of decorative whitespace.
|
|
92
92
|
- Modal, drawer, overlay, and floating tool visual weight should match consequence: lightweight details should not look as severe as destructive confirmation.
|
|
@@ -106,12 +106,12 @@ For each flow, inspect and record:
|
|
|
106
106
|
|
|
107
107
|
## Behavioral And Psychology Anchors
|
|
108
108
|
|
|
109
|
-
Each behavioral or psychology rule needs
|
|
109
|
+
Each behavioral or psychology rule needs an observable risk, a falsifiable hypothesis, and a named evidence boundary. A theory name is retrieval shorthand, not a universal design instruction; classify and source theory claims through `product-ui-ux-design/references/external-ui-ux-quality-benchmarks.md`.
|
|
110
110
|
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
111
|
+
- Choice search: when competing options slow or confuse the representative task, reduce simultaneous choices or progressively disclose secondary controls; verify the task outcome instead of invoking a named law as proof.
|
|
112
|
+
- Target acquisition: repeated controls need stable placement, and interactive targets need a hit area appropriate to the current platform, input mode, task frequency, and consequence. Do not derive high-risk confirmation or an exact size from Fitts's law.
|
|
113
|
+
- Hidden-context burden: chunk dense information and preserve task context across modal or route changes; verify recall, comparison, and recovery in representative tasks rather than asserting a fixed working-memory limit.
|
|
114
|
+
- State uncertainty: acknowledge actions and expose pending, success, failure, and recovery states at a pace appropriate to the operation. An arbitrary response-time threshold is not acceptance evidence.
|
|
115
115
|
- Error prevention: prevent invalid input before submit when possible; when not possible, show local repair guidance.
|
|
116
116
|
- User control: provide cancel, undo, retry, edit, restore, or explicit irreversible confirmation depending on consequence.
|
|
117
117
|
- Trust: show source, scope, permission, timestamp, automation caveat, and consequence near the affected decision.
|
|
@@ -128,14 +128,14 @@ Before commit, for any rule that appears in more than one authored file (`SKILL.
|
|
|
128
128
|
|
|
129
129
|
## Bounded Independent Review Packet
|
|
130
130
|
|
|
131
|
-
Use this when an independent review is required but a broad reviewer prompt hangs, returns no output, or starts expanding beyond the intended review scope.
|
|
131
|
+
Use this when an independent review is required but a broad reviewer prompt hangs, returns no output, or starts expanding beyond the intended review scope. For non-wording extraction work, the gate-valid path is `scripts/extraction_review_gate.sh`, which owns the fixed autonomous budget while delegating transport to the provider-neutral `code-review` controller. A strictly proven wording-only change uses the proof-bound generic single-review recipe in `code-review/references/staged-review-contract.md`; its controller-derived wording scope and independent `wording_only_boundary` result replace neither one another nor a failed semantic check. Both paths preserve the frozen packet, family exclusion, structured validation and client-specific recovery; raw provider CLI packets are debugging/advisory only and must not be recorded as passing review evidence.
|
|
132
132
|
|
|
133
133
|
Required flow:
|
|
134
134
|
|
|
135
|
-
1. Prove the
|
|
135
|
+
1. Prove the applicable owner gate is available. For non-wording work, run `skills/skill-extraction-workflow/scripts/extraction_review_gate.sh --help`; for a strictly proven wording-only change, use the generic `code-review` help recipe. This local availability check does not invoke a model and is not review evidence. Do not use a raw provider "ping" as gate evidence. If the gate cannot run after documented remediation, record the lane as unavailable/inconclusive with command evidence.
|
|
136
136
|
2. Stop the stuck review process before retrying. Do not leave background reviewer sessions running and do not count a no-output process as a completed review.
|
|
137
137
|
3. Build a bounded packet from the exact changed files or excerpts being claimed. Prefer `git diff -- <files>` for local changes.
|
|
138
|
-
4. Feed
|
|
138
|
+
4. Feed a non-wording packet through `scripts/extraction_review_gate.sh`; feed a strictly proven wording-only packet through the proof-bound generic single-review recipe. The wording-only path uses its exact canonical full-context diff and proof file, stays untracked, and does not run `complete`; a custom/context-augmented packet or missing `wording_only_boundary` result re-arms challenge. In either case supply the actual implementer family, required `--review-plan-file`, stage, exact candidate, and explicit non-Claude egress approval when applicable. The plan binds the target, acceptance criteria, self-review and evidence before the independent run. The gate preserves tool posture, timeout, attribution and output parsing while following the user's local client order. A raw Claude packet may be used only to debug a wrapper failure and remains advisory:
|
|
139
139
|
|
|
140
140
|
```sh
|
|
141
141
|
git -C <repo> diff -- <files...> \
|
|
@@ -151,6 +151,7 @@ Review only stdin. Do not use tools. Do not request more context. Return finding
|
|
|
151
151
|
5. Apply or explicitly reject actionable findings.
|
|
152
152
|
6. Rerun the owning skill validators and `git diff --check`.
|
|
153
153
|
7. Record the result as `findings applied`, `no blocking findings`, or `review unavailable after remediation` only when the wrapper or approved alternate produced valid structured evidence. Raw packet output is recorded separately as debugging/advisory and cannot close the gate.
|
|
154
|
+
8. At a non-wording terminal checkpoint, build the receipt-bound ledger and run `scripts/validate_extraction_review_state.py <closeout.json>`. A wording-only review records its single independent-review row and does not invent a multi-round ledger.
|
|
154
155
|
|
|
155
156
|
Do not count as completed review:
|
|
156
157
|
|
|
@@ -280,8 +280,11 @@ end
|
|
|
280
280
|
# Maintain by RETIREMENT, not by growth: when a term no longer proxies anything
|
|
281
281
|
# live, delete it (quantify current hits first, and keep a retained-term control
|
|
282
282
|
# so the scan is proven still able to fail). Do not add generic technical words.
|
|
283
|
-
# Both directions are pinned by test_entrypoint_domain_scan_terms.sh.
|
|
284
|
-
|
|
283
|
+
# Both directions are pinned by test_entrypoint_domain_scan_terms.sh. Long digit
|
|
284
|
+
# runs are scanned separately so canonical public DOI/W3C identifiers are not
|
|
285
|
+
# mistaken for private object IDs while an unrelated ID on the same line still
|
|
286
|
+
# fails closed.
|
|
287
|
+
if leak_output="$(rg -n 'code\.[[:alnum:].-]+|figma\.com/files|\x{6559}\x{5e08}|\x{5b66}\x{751f}|\x{8003}\x{8bd5}|\x{5b66}\x{6821}|\x{9605}\x{5377}|\x{51fa}\x{5377}|\x{5b66}\x{60c5}' "$root"/skills/*/SKILL.md "$root"/skills/*/references/*.md 2>/dev/null)"; then
|
|
285
288
|
echo "$leak_output"
|
|
286
289
|
echo "entrypoint_or_reference_domain_scan_failed" >&2
|
|
287
290
|
exit 1
|
|
@@ -292,6 +295,70 @@ else
|
|
|
292
295
|
exit 1
|
|
293
296
|
fi
|
|
294
297
|
fi
|
|
298
|
+
|
|
299
|
+
if ! long_digit_output="$(ruby -e '
|
|
300
|
+
allowed_url = %r{https://(?:
|
|
301
|
+
doi\.org/10\.[0-9]{4,9}/(?<doipayload>[A-Za-z0-9._;()/:+\-]+)
|
|
302
|
+
|
|
|
303
|
+
www\.w3\.org/community/reports/[a-z0-9-]+/CG-FINAL-[A-Za-z0-9._-]*(?<w3cdate>[0-9]{8})/?
|
|
304
|
+
)}ix
|
|
305
|
+
ARGV.each do |path|
|
|
306
|
+
next unless File.file?(path)
|
|
307
|
+
File.foreach(path).with_index(1) do |line, line_number|
|
|
308
|
+
allowed_spans = []
|
|
309
|
+
line.to_enum(:scan, allowed_url).each do
|
|
310
|
+
match = Regexp.last_match
|
|
311
|
+
url = match[0]
|
|
312
|
+
next if url.include?("?") || url.include?("#")
|
|
313
|
+
# The allowlist is shape-only (no registrant validation), so a
|
|
314
|
+
# fabricated DOI-shaped wrapper could otherwise launder any private
|
|
315
|
+
# numeric ID. A span grants exemption only when its identifier
|
|
316
|
+
# payload (the DOI suffix after the registrant slash, or the W3C
|
|
317
|
+
# report date) carries no merged digit run above 9 digits, where a
|
|
318
|
+
# merged run joins digit groups across one or MORE consecutive
|
|
319
|
+
# punctuation separators — every punctuation char the DOI payload
|
|
320
|
+
# charset accepts, so no accepted punctuation can split an ID into
|
|
321
|
+
# exempt halves. Letters stay run boundaries because real DOI
|
|
322
|
+
# suffixes legitimately interleave them (s15516709cog1202_4). This
|
|
323
|
+
# keeps real citations green (10.1038/35057062 has an 8-digit
|
|
324
|
+
# payload; the registrant prefix is bounded to 9 digits by shape)
|
|
325
|
+
# while a split or padded identifier such as 123456789-123456789,
|
|
326
|
+
# 20260830--123456, or 123456789+123456789 voids its span entirely.
|
|
327
|
+
payload_name = match[:doipayload] ? :doipayload : :w3cdate
|
|
328
|
+
payload = line[match.begin(payload_name)...match.end(payload_name)]
|
|
329
|
+
payload_ok = payload.scan(/[0-9]+(?:[-._\/;():+]+[0-9]+)*/).all? do |run|
|
|
330
|
+
run.delete("^0-9").length <= 9
|
|
331
|
+
end
|
|
332
|
+
next unless payload_ok
|
|
333
|
+
# The exempt span is the identifier payload, not the whole URL: a
|
|
334
|
+
# W3C report NAME has no business carrying a long digit run, so only
|
|
335
|
+
# the trailing date is exempt there; a DOI suffix is the identifier
|
|
336
|
+
# itself, so its whole payload is exempt once it passes the cap.
|
|
337
|
+
allowed_spans << (match.begin(payload_name)...match.end(payload_name))
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
leaked = line.to_enum(:scan, /[0-9]{8,}/).any? do
|
|
341
|
+
match = Regexp.last_match
|
|
342
|
+
# Per-match cap: even inside a payload-clean span, a single raw run
|
|
343
|
+
# above 9 digits (timestamp/snowflake scale) is never exempt.
|
|
344
|
+
exempt = match[0].length <= 9 && allowed_spans.any? do |span|
|
|
345
|
+
span.begin <= match.begin(0) && match.end(0) <= span.end
|
|
346
|
+
end
|
|
347
|
+
!exempt
|
|
348
|
+
end
|
|
349
|
+
puts "#{path}:#{line_number}:#{line.chomp}" if leaked
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
' "$root"/skills/*/SKILL.md "$root"/skills/*/references/*.md 2>&1)"; then
|
|
353
|
+
echo "$long_digit_output" >&2
|
|
354
|
+
echo "entrypoint_long_digit_scan_error" >&2
|
|
355
|
+
exit 1
|
|
356
|
+
fi
|
|
357
|
+
if [[ -n "$long_digit_output" ]]; then
|
|
358
|
+
echo "$long_digit_output"
|
|
359
|
+
echo "entrypoint_or_reference_domain_scan_failed" >&2
|
|
360
|
+
exit 1
|
|
361
|
+
fi
|
|
295
362
|
echo "entrypoint_and_reference_domain_scan_ok"
|
|
296
363
|
|
|
297
364
|
# Recurring anti-pattern scan: a TARGETED mechanical backstop (NOT a comprehensive
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Extraction-owned autonomous review wrapper: one review plus two challenges.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
6
|
+
CONTROLLER="$SCRIPT_DIR/../../code-review/scripts/review_gate.sh"
|
|
7
|
+
|
|
8
|
+
for arg in "$@"; do
|
|
9
|
+
case "$arg" in
|
|
10
|
+
--challenge-b*)
|
|
11
|
+
echo "extraction_review_gate_error: challenge budget is fixed at 2" >&2
|
|
12
|
+
exit 2
|
|
13
|
+
;;
|
|
14
|
+
esac
|
|
15
|
+
done
|
|
16
|
+
|
|
17
|
+
if [[ ! -x "$CONTROLLER" ]]; then
|
|
18
|
+
echo "extraction_review_gate_error: code-review controller is unavailable" >&2
|
|
19
|
+
exit 2
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
exec bash "$CONTROLLER" --challenge-budget 2 "$@"
|
|
@@ -132,6 +132,7 @@ upstream_owner_skills = %w[
|
|
|
132
132
|
llm-inference-integration
|
|
133
133
|
multi-agent-delegation
|
|
134
134
|
multi-perspective-research
|
|
135
|
+
nodejs-service-dev
|
|
135
136
|
platform-observability
|
|
136
137
|
platform-release-engineering
|
|
137
138
|
platform-service-connectivity
|
|
@@ -292,8 +293,10 @@ upstream = upstream.reject do |path|
|
|
|
292
293
|
rename_excused[path] = true if excused
|
|
293
294
|
excused
|
|
294
295
|
end
|
|
295
|
-
# The block runs when a selected owner changed (there is something to demand)
|
|
296
|
-
# when
|
|
296
|
+
# The block runs when a selected owner changed (there is something to demand),
|
|
297
|
+
# when any skill entrypoint changed (its description may owe routing-bank
|
|
298
|
+
# evidence), OR when the ledger itself changed (there is something to validate).
|
|
299
|
+
# It used to
|
|
297
300
|
# gate on `upstream.any?` alone, which is the demand side only — and that is the
|
|
298
301
|
# other half of the restored-owner hole: revert the owner and the range has no
|
|
299
302
|
# changed owner at all, so the entire row evaluation was skipped and the
|
|
@@ -303,7 +306,10 @@ end
|
|
|
303
306
|
# `eval/routing-tasks.jsonl` changes no owner package and need not touch the
|
|
304
307
|
# ledger, so without this the whole block — including the bank-evidence
|
|
305
308
|
# obligation written for exactly that change — was never entered.
|
|
306
|
-
|
|
309
|
+
routing_entrypoint_changed = changed_paths.any? do |path|
|
|
310
|
+
path.match?(%r{\Askills/[^/]+/SKILL\.md\z})
|
|
311
|
+
end
|
|
312
|
+
if upstream.any? || routing_entrypoint_changed || changed_paths.include?(LEDGER_PATH) || changed_paths.include?("eval/routing-tasks.jsonl")
|
|
307
313
|
# Rows are collected PER ROUND and carry the scope they were authored against,
|
|
308
314
|
# so the classifiers below judge a row against its own round's diff. Reading the
|
|
309
315
|
# cumulative register diff instead would re-judge every earlier round's rows
|
|
@@ -1564,6 +1570,13 @@ if upstream.any? || changed_paths.include?(LEDGER_PATH) || changed_paths.include
|
|
|
1564
1570
|
round_bounds.each do |span_base, span_head|
|
|
1565
1571
|
scope = scope_at.call(span_base, span_head)
|
|
1566
1572
|
scope_rows = rows.select { |row| row[:scope].head == span_head }
|
|
1573
|
+
# Routing-bank evidence applies to every skill description, not only to the
|
|
1574
|
+
# curated impact-chain owners. Keep a separate vocabulary for this one
|
|
1575
|
+
# obligation so broadening bank coverage cannot broaden the impact-chain
|
|
1576
|
+
# subject set or its row refusals.
|
|
1577
|
+
bank_owner_names = (
|
|
1578
|
+
owner_names_at.call(scope.base) + owner_names_at.call(scope.head)
|
|
1579
|
+
).uniq
|
|
1567
1580
|
# Same head-declared-grammar rule as `result-class` above, and for the same
|
|
1568
1581
|
# reason: the paragraph that defines `bank-evidence` also dates it.
|
|
1569
1582
|
next unless grammar_declared_at.call(scope.head)
|
|
@@ -1578,6 +1591,13 @@ if upstream.any? || changed_paths.include?(LEDGER_PATH) || changed_paths.include
|
|
|
1578
1591
|
# being silently outside the trigger because of how the owner set is built.
|
|
1579
1592
|
created_surfaces = scope.changed_paths.filter_map do |relative|
|
|
1580
1593
|
next unless relative.start_with?("skills/") && relative.end_with?("/SKILL.md")
|
|
1594
|
+
# This pickup covers both a brand-new entrypoint and an EXISTING
|
|
1595
|
+
# non-curated skill editing its description — both move the routing
|
|
1596
|
+
# surface. An earlier round bounded it to base-absent entrypoints
|
|
1597
|
+
# because non-curated obligations were undischargeable then; the
|
|
1598
|
+
# bank-only resolver below now binds rows over base+head skill names,
|
|
1599
|
+
# so the obligation is dischargeable and the bound would only reopen
|
|
1600
|
+
# the evidence-free description-edit hole.
|
|
1581
1601
|
path = relative.sub(%r{\Askills/}, "")
|
|
1582
1602
|
next if triggered_owners.include?(path)
|
|
1583
1603
|
next unless description_touched.call(scope, path)
|
|
@@ -1623,7 +1643,31 @@ if upstream.any? || changed_paths.include?(LEDGER_PATH) || changed_paths.include
|
|
|
1623
1643
|
end
|
|
1624
1644
|
triggered_owners.each do |path|
|
|
1625
1645
|
owner = path.sub(%r{/SKILL\.md\z}, "")
|
|
1626
|
-
owner_scope_rows =
|
|
1646
|
+
owner_scope_rows =
|
|
1647
|
+
if upstream_set[path] || lineage_extra[path]
|
|
1648
|
+
# Preserve the existing selected-owner resolver byte-for-byte: bank
|
|
1649
|
+
# coverage must not weaken or widen impact-chain attribution.
|
|
1650
|
+
rows_by_upstream_path[path].select { |row| row[:scope].head == scope.head }
|
|
1651
|
+
else
|
|
1652
|
+
# Mirror that resolver for bank-only owners. Declaring rows use the
|
|
1653
|
+
# owner-package prefix convention; non-declaring rows keep the prior
|
|
1654
|
+
# exact `<owner>/SKILL.md` convention. A row naming more than one owner
|
|
1655
|
+
# satisfies none of them, so one locator cannot discharge two routing
|
|
1656
|
+
# surfaces.
|
|
1657
|
+
scope_rows.select do |row|
|
|
1658
|
+
declares_impact_chain = row[:behavior].split(";").any? do |fragment|
|
|
1659
|
+
fragment.match?(/\A\s*behavioral-evidence:/i)
|
|
1660
|
+
end
|
|
1661
|
+
candidate_names =
|
|
1662
|
+
if declares_impact_chain
|
|
1663
|
+
bank_owner_names.select { |name| owner_mentioned.call(row[:evidence], name) }
|
|
1664
|
+
else
|
|
1665
|
+
row[:evidence].scan(owner_skill_md_path).flatten.uniq
|
|
1666
|
+
.select { |name| bank_owner_names.include?(name) }
|
|
1667
|
+
end
|
|
1668
|
+
candidate_names == [owner]
|
|
1669
|
+
end
|
|
1670
|
+
end
|
|
1627
1671
|
bank_evidence_failures << path unless owner_scope_rows.any? { |row| row_satisfies.call(row, owner) }
|
|
1628
1672
|
end
|
|
1629
1673
|
if bank_changed
|
|
@@ -1637,6 +1681,7 @@ if upstream.any? || changed_paths.include?(LEDGER_PATH) || changed_paths.include
|
|
|
1637
1681
|
warn "impact_chain_bank_evidence_missing: a round that changed the routing surface carries no bank evidence for that owner"
|
|
1638
1682
|
warn " note: the routing surface is the SKILL.md frontmatter `description` entry and `#{bank_relative}`. The measurement protocol says it is mandatory, but nothing produced or consumed it, so not running it left no absence to detect — the reviewer saw a candidate, not a gap"
|
|
1639
1683
|
warn " fix: add `bank-evidence: command:<changed executable>` or `bank-evidence: file:<changed markdown>#<unique anchor>` to that owner's row; to skip the run deliberately use `bank-evidence: downscoped:<token>` and record the same token in this round's spec, so the downscope is itself an artifact"
|
|
1684
|
+
warn " note: a row without a `behavioral-evidence:` fragment attributes to its owner only via a bare `<owner>/SKILL.md` citation in the evidence cell — the full `skills/<owner>/SKILL.md` spelling is reserved for locators and does NOT attribute, so a row that looks like valid evidence but cites only the full path never reaches the owner"
|
|
1640
1685
|
bank_evidence_failures.each { |path| warn " owes bank evidence: #{path}" }
|
|
1641
1686
|
exit 1
|
|
1642
1687
|
end
|