@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
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
# Retry, Timeout, Circuit Breaker
|
|
2
2
|
|
|
3
|
-
Where each policy lives, how
|
|
3
|
+
Where each policy lives, how timeouts compose, and how to bound retry amplification. Istio field names below apply to Istio HTTP/gRPC paths; other transports keep their platform-owned equivalents.
|
|
4
4
|
|
|
5
5
|
## Layered policy
|
|
6
6
|
|
|
7
|
-
For a single call A → B,
|
|
7
|
+
For a single call A → B, several independent timers can end the call:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
TCP/HTTP2 connect + idle timeouts ← Envoy defaults; rarely tuned
|
|
17
|
-
```
|
|
9
|
+
| Timer | Owner | Example |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Caller deadline | App context | 800ms remaining |
|
|
12
|
+
| Total client-call budget | Framework client | 500ms, including retries and backoff |
|
|
13
|
+
| Mesh request timeout | VirtualService HTTP route `timeout` | 2s platform cap |
|
|
14
|
+
| Per-attempt timeout | VirtualService HTTP route `retries.perTryTimeout`, or the retry-owning SDK | Must fit the remaining call budget |
|
|
15
|
+
| Connection / idle timeout | DestinationRule connection pool / transport | Bounds connection setup or inactivity, not total business work |
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
The earliest applicable expiry wins. With the example values measured from call start, the client ends the call at 500ms; the 2s mesh cap can remain a platform backstop. These are not nested durations that must decrease from client to mesh. Propagate cancellation so downstream work stops when the caller's budget expires; a longer transport cap does not extend the caller's deadline.
|
|
18
|
+
|
|
19
|
+
Istio's [HTTPRoute and HTTPRetry fields](https://istio.io/latest/docs/reference/config/networking/virtual-service/) own request/attempt timeout and request retries. [DestinationRule connection-pool settings](https://istio.io/latest/docs/reference/config/networking/destination-rule/) own connection timeouts and concurrent-retry limits; its traffic policy owns outlier detection.
|
|
20
20
|
|
|
21
21
|
## Timeout budget rule
|
|
22
22
|
|
|
23
23
|
For a chain A → B → C:
|
|
24
24
|
|
|
25
25
|
```
|
|
26
|
-
A.ctx.deadline
|
|
27
|
-
A's client-to-B budget
|
|
28
|
-
B's
|
|
29
|
-
|
|
26
|
+
A's remaining duration = A.ctx.deadline - now
|
|
27
|
+
A's client-to-B budget ≤ remaining duration - margin (e.g. 50-100ms for serialization)
|
|
28
|
+
B's client-to-C budget ≤ B's remaining duration - margin
|
|
29
|
+
All sequential work, attempts, and backoff fit within that remaining budget
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
A framework helper
|
|
32
|
+
A framework helper computes `min(remaining_duration - margin, configured_call_budget, applicable_platform_cap)`. If no usable duration remains, fail without dispatching another attempt. Pass the resulting deadline downstream and recompute the remainder after work or backoff; do not compare an absolute deadline with a duration or restart the full budget at each hop.
|
|
33
33
|
|
|
34
34
|
## Retry placement
|
|
35
35
|
|
|
36
36
|
| Layer | Retries WHAT | When |
|
|
37
37
|
|---|---|---|
|
|
38
|
-
| Mesh (
|
|
38
|
+
| Mesh (VirtualService HTTP route) | Explicitly selected network errors or response statuses | Declared idempotent calls, or failures proven to precede server receipt |
|
|
39
39
|
| Framework client | idempotent business RPCs | Per-method opt-in |
|
|
40
40
|
| App handler | nothing | App level retry usually wrong |
|
|
41
41
|
| App business logic | high-level workflows | Saga / orchestration patterns, not "I'll retry the call once" |
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Retry layers multiply total attempts. If mesh and framework each make at most two total attempts, one logical call can reach the backend four times. Istio `retries.attempts` counts retries after the initial request: a value of 2 permits up to 3 total attempts, subject to time and retry budgets.
|
|
44
44
|
|
|
45
|
-
**Rule**: when enabling framework-level retry,
|
|
45
|
+
**Rule**: when enabling framework-level retry, set `retries.attempts: 0` on every matching VirtualService HTTP route used by that call and verify the effective generated route configuration. Keep DestinationRule connection limits and outlier detection; they do not replace the route-level retry switch.
|
|
46
46
|
|
|
47
47
|
Mesh retries back off automatically (Istio/Envoy: jittered exponential backoff with a default 25ms *base* interval — fully jittered, so an actual delay can be shorter than the base; it is not a guaranteed minimum gap); framework-level retry gets no such freebie — it must implement its own jittered backoff that fits inside the caller's remaining deadline.
|
|
48
48
|
|
|
@@ -51,24 +51,24 @@ Mesh retries back off automatically (Istio/Envoy: jittered exponential backoff w
|
|
|
51
51
|
Per-call retry counts bound retries *per request*; they do not bound a caller's total retry share during a partial outage — at high QPS, "2 retries each" is up to a 3× load multiplier at the exact moment the upstream is sickest. Envoy's cluster circuit breakers cap this per proxy:
|
|
52
52
|
|
|
53
53
|
- `max_retries` — max **concurrent** retries to the cluster, per priority. Retries beyond it overflow (fail fast, counted in `upstream_rq_retry_overflow`). The raw Envoy default is 3, but the control plane above Envoy may override it: Istio's `connectionPool.http.maxRetries` defaults to **2^32-1 — effectively unlimited** — so in an Istio mesh "leave it unset and rely on the default cap" is a trap. Set the limit explicitly and verify the *generated* Envoy cluster config, not the assumption.
|
|
54
|
-
- `retry_budget` — replaces the fixed cap with a load-proportional one: concurrent retries ≤ `budget_percent` (default 20%) of active + pending requests, with a `min_retry_concurrency` floor so low-traffic clusters can still retry. When set,
|
|
54
|
+
- `retry_budget` — replaces the fixed cap with a load-proportional one: in the default instantaneous mode, concurrent retries ≤ `budget_percent` (default 20%) of active + pending requests, with a `min_retry_concurrency` floor so low-traffic clusters can still retry. Versions exposing a non-zero `budget_interval` can count requests over that interval instead; verify the configured version and mode. When set, the budget overrides `max_retries`. Reachability caveat: Istio's DestinationRule API exposes only `connectionPool.http.maxRetries`, NOT `retry_budget` — on plain Istio, set a finite `maxRetries` first; adopting `retry_budget` there means an EnvoyFilter, acceptable only with the *generated* cluster config verified.
|
|
55
55
|
- Know exactly what the budget bounds — and what it doesn't. It bounds **Envoy-originated, concurrent** retries, per proxy. It does NOT bound: retry attempt *rate*; **framework-level retries** (each framework attempt arrives at Envoy as a fresh request and bypasses `max_retries`/`retry_budget` entirely — a platform running framework retries needs a framework-side budget or strict per-call caps); or the **fleet aggregate** (circuit breaking is distributed, not coordinated — each sidecar enforces its own budget and floor, so aggregate retry load still scales with caller replica count). A true service-wide load bound requires callee-side protection (admission control / load shedding, owned by the service-architecture skills) on top.
|
|
56
56
|
- When tuning for a flaky dependency, set a retry budget rather than raising per-call retry counts — but pick `budget_percent` AND `min_retry_concurrency` deliberately against the callee's capacity: on a very high-QPS caller, an unexamined 20% of active requests is far looser than `max_retries: 3`, and with many low-traffic sidecars the aggregate floor (≈ replicas × `min_retry_concurrency`) dominates instead. Alert on the overflow counter: a growing overflow stat means callers are shedding retries, which is the budget doing its job; do not "fix" it by raising the cap.
|
|
57
57
|
|
|
58
58
|
## Idempotency awareness
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
Both mesh and framework client retries MUST consider idempotency:
|
|
61
61
|
|
|
62
62
|
```
|
|
63
63
|
RPC method declares "idempotent: true" in IDL or annotation
|
|
64
64
|
↓
|
|
65
|
-
|
|
65
|
+
The retry-owning layer applies a policy only to methods covered by that declaration
|
|
66
66
|
↓
|
|
67
67
|
Non-idempotent retry happens only if the network error proves the request didn't reach the server
|
|
68
68
|
(connect refused, TLS handshake failure — yes; "request sent, no response" — no)
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Don't trust HTTP method (POST can be idempotent; GET can have side effects). Trust the declaration.
|
|
71
|
+
Don't trust HTTP method (POST can be idempotent; GET can have side effects). Trust the declaration. A 5xx, gRPC `UNAVAILABLE`, timeout, or missing response alone does not prove that a write was not applied. If the mesh cannot distinguish safe methods, keep its request retries disabled and let the method-aware SDK own the policy.
|
|
72
72
|
|
|
73
73
|
## Circuit breaker / outlier detection
|
|
74
74
|
|
|
@@ -78,12 +78,12 @@ Mesh outlier-detection (Envoy):
|
|
|
78
78
|
trafficPolicy:
|
|
79
79
|
outlierDetection:
|
|
80
80
|
consecutive5xxErrors: 5 # 5 consecutive 5xx → eject this pod
|
|
81
|
-
interval: 10s #
|
|
81
|
+
interval: 10s # periodic ejection analysis / recovery sweep
|
|
82
82
|
baseEjectionTime: 30s # eject for 30s minimum
|
|
83
83
|
maxEjectionPercent: 50 # never eject more than 50% of pool
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
For a meshed path, this provides per-host ejection observable through Envoy stats. [Envoy's ejection algorithm](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/outlier) checks consecutive-error thresholds inline; periodic analyses use `interval`. An ejection also depends on the configured threshold/enforcement and pool limits. Killing a pod once does not prove those conditions fired.
|
|
87
87
|
|
|
88
88
|
Framework SDK circuit breakers (e.g. hystrix-style) are a fallback for environments without mesh, or for business-logic-driven breaking (e.g. "this dependency's error rate hit 10%, switch to degraded mode").
|
|
89
89
|
|
|
@@ -91,36 +91,40 @@ Don't run mesh outlier-detection AND SDK circuit breaker simultaneously without
|
|
|
91
91
|
|
|
92
92
|
## Cascading cancel
|
|
93
93
|
|
|
94
|
-
When a caller's ctx is cancelled (deadline, client disconnect, user back-button),
|
|
94
|
+
When a caller's ctx is cancelled (deadline, client disconnect, user back-button), propagate it to in-flight downstream calls. [gRPC cancellation](https://grpc.io/docs/guides/cancellation/) requires application handlers to cooperate; outgoing-call propagation also depends on the language/runtime. Verify cancellation reaches the handler, stops its work and child calls, and releases resources within the service's documented cancellation bound. A transport cancellation signal alone does not prove application work stopped.
|
|
95
95
|
|
|
96
96
|
If a service swallows ctx cancel, downstream load amplifies during user disconnects (every abandoned tab continues hammering the DB).
|
|
97
97
|
|
|
98
98
|
## Hedging
|
|
99
99
|
|
|
100
|
-
Hedging
|
|
100
|
+
Hedging sends an additional request while the first is still in flight and returns the first acceptable response. It can reduce tail latency for idempotent reads, at the cost of concurrent upstream work.
|
|
101
101
|
|
|
102
102
|
Risks:
|
|
103
103
|
- Doubles load if T is too short.
|
|
104
104
|
- Not safe for non-idempotent calls.
|
|
105
|
-
-
|
|
105
|
+
- Bound concurrent attempts, total deadline and admitted load; cancel losing attempts after choosing a response and propagate caller cancellation.
|
|
106
|
+
- Envoy's [HedgePolicy](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-hedgepolicy) uses `hedge_policy.hedge_on_per_try_timeout` with a finite per-try timeout and a retry policy containing retry conditions and a positive retry limit. `retry_priority` selects upstream priorities; it does not enable hedging.
|
|
107
|
+
- Istio's HTTPRetry API does not expose a hedging field. Use an explicitly supported platform mechanism (such as an EnvoyFilter with generated-route and runtime verification), or a method-aware SDK; do not infer hedging from `perTryTimeout` alone. Keep a single retry/hedge owner.
|
|
106
108
|
|
|
107
109
|
Default: off. Enable per-method after measuring p99 latency distribution.
|
|
108
110
|
|
|
109
111
|
## Common mistakes
|
|
110
112
|
|
|
111
|
-
-
|
|
112
|
-
- Retrying
|
|
113
|
+
- Treating a shorter mesh timeout as invisible to the client → the client can receive a mesh timeout response before its own deadline. Verify error mapping and the retry-owning layer; do not turn that response into an unsafe replay.
|
|
114
|
+
- Retrying every 4xx → permanent client errors do not fix themselves. Only a documented transient condition, such as a rate-limit response with a bounded retry delay, may be eligible under the idempotency and remaining-budget rules.
|
|
113
115
|
- Retrying with exponential backoff while caller deadline is 200ms → backoff exceeds deadline, retry never fires, you wasted code.
|
|
114
|
-
- Mesh
|
|
116
|
+
- Mesh and SDK each allow 3 retries after the initial request → up to 16 backend attempts per logical call, before deadline/budget limits.
|
|
115
117
|
- Circuit breaker tripped but no metric → debugging blind.
|
|
116
118
|
|
|
117
119
|
## Tuning starting points
|
|
118
120
|
|
|
119
|
-
|
|
121
|
+
These are example starting points for eligible traffic, not vendor defaults or a mandate to enable retries. Apply the idempotency and single-owner rules first.
|
|
122
|
+
|
|
123
|
+
| Policy | Starting point |
|
|
120
124
|
|---|---|
|
|
121
125
|
| Mesh request timeout | 5s (HTTP), 10s (RPC); per-callee override |
|
|
122
|
-
| Mesh retry attempts | 2 |
|
|
123
|
-
| Mesh retry per-try timeout |
|
|
126
|
+
| Mesh retry attempts | 0 unless mesh owns safe retries; then up to 2 retries within the call budget |
|
|
127
|
+
| Mesh retry per-try timeout | Fit within the remaining call budget; reserve time for backoff and any later attempt |
|
|
124
128
|
| Mesh outlier detection | 5 consecutive 5xx, 30s eject |
|
|
125
129
|
| Framework client per-call budget | 500ms or shrunk from ctx deadline |
|
|
126
130
|
| Framework client retry | OFF by default; opt-in per idempotent method |
|
|
@@ -130,6 +134,9 @@ Tune from observed p99 + error rate, not vibes.
|
|
|
130
134
|
## Verification
|
|
131
135
|
|
|
132
136
|
- Trigger downstream 5xx storm → mesh outlier-detection metrics show ejection events; client-side error rate spikes then recovers.
|
|
133
|
-
- Force a connect refusal →
|
|
137
|
+
- Force a connect refusal → only the configured retry owner produces attempts, counts fit its budget, and the final caller sees one error. With SDK-owned retries, confirm effective route retries are disabled.
|
|
134
138
|
- Set per-call timeout below mesh ceiling → confirm caller sees its own deadline, not mesh's.
|
|
135
|
-
-
|
|
139
|
+
- Set mesh request timeout below the client budget → confirm the mapped mesh error is visible and does not trigger a second, unintended retry layer.
|
|
140
|
+
- For a non-idempotent write with a lost response, confirm neither layer blindly replays it.
|
|
141
|
+
- With hedging enabled, delay an eligible call past the per-try timeout → confirm bounded concurrent attempts, first acceptable response selection, loser cancellation, and no second retry/hedge owner.
|
|
142
|
+
- Cancel a request mid-flight → confirm handler work and downstream calls stop and resources release within the declared cancellation bound.
|
|
@@ -79,7 +79,7 @@ The framework client resolver:
|
|
|
79
79
|
## Cross-language registration
|
|
80
80
|
|
|
81
81
|
If services span Go, Python, Java, Node: every language SDK must agree on:
|
|
82
|
-
- Service name shape
|
|
82
|
+
- Service name shape and its mapping to endpoint, authority, and TLS identity. Apply the agreed platform naming policy and actual DNS/SDK/proxy constraints; gRPC alone does not require renaming an existing working identifier (see `grpc-authority-workaround.md`).
|
|
83
83
|
- Tag key names (`lane`, not `env`; pick one).
|
|
84
84
|
- Heartbeat interval and TTL.
|
|
85
85
|
- Health state semantics.
|
|
@@ -9,7 +9,7 @@ Use this skill as the top-level workflow for new product development, feature de
|
|
|
9
9
|
|
|
10
10
|
**Entry precedence.** For any product idea, feature delivery, release, cross-cutting refactor, or a **restart/redo of an in-flight delivery**, invoke this workflow first to classify and route — naming a stack/execution skill (e.g. `web-react-dev`, `multi-agent-delegation`) does not by itself skip this workflow's lifecycle gates (design / test / release / acceptance); those still apply unless already covered.
|
|
11
11
|
|
|
12
|
-
**Continuation-proposal output contract (session-wide for product delivery).**
|
|
12
|
+
**Continuation-proposal output contract (session-wide for product delivery).** Use `proposed-next: <action and scope>` to make a next action observable, or `proposed-next: none — status only` for a status-only handoff. A missing, repeated, or conflicting marker triggers intent recovery, not a stop. Follow the current explicit user request; bind short assent to one recoverable concrete proposal and its scope. Repair your own formatting without asking the user to repeat an already-clear instruction. Markers never grant authority. Recovery, ambiguity, and outcome rules: `references/pre-final-continuation-gate.md` (Continuation-proposal output contract).
|
|
13
13
|
|
|
14
14
|
- **Restart/redo of an in-flight delivery** (清除代码重新开发 / 完全重新开始 / 推倒重来 / redo-from-scratch): a restart is a fresh delivery entry; mid-delivery coding momentum is NOT a license to skip re-classification and re-enter. Re-entry means re-ESTABLISH the plan and develop against it, not code from memory — "丢脚手架 / 重来" defaults to discarding CODE, not the design/spec artifact; discarding the design/spec itself needs an explicit user opt-out after clarification (an explicit instruction to drop the design always wins). Recovery mechanics and deviation recording live in `references/implementation-entry-reentry-gate.md` §Baseline Selection.
|
|
15
15
|
- **Implementation entry / re-entry gate (active plan/spec required by default).** For product R&D deliveries that stay in this workflow, "start development" means first establish the current executable artifact set, then code against it; requests routed straight to another owning skill by the *Go straight to the owning skill* bullet below use that owner's entry rules instead. Use existing specs, implementation plans, assessment reports, issue/MR descriptions, or repo-local task docs only after reading them back or citing artifacts just produced in the active session, then checking freshness, scope, owner skills, acceptance checks, tests, stop conditions, and **landing state** (`local status`, `MR-ready`, `landed`, `release-ready`, or `shared-status-ready`). Full mechanics for every case below live in `references/implementation-entry-reentry-gate.md`.
|
|
@@ -164,7 +164,7 @@ At each stage boundary, walk the per-stage entry-state enumeration in [Stage-Ent
|
|
|
164
164
|
- High-risk workflows cannot be accepted by happy-path tests alone. Require a risk scenario matrix and replayable incident drills for the relevant classes: duplicate money/quota/write side effects, permission uncertainty, tenant/user data isolation, AI provider/model failure, user repeated submission or unclear final state, and traceable incident explanation.
|
|
165
165
|
- For UI backed by APIs or generated content, require `testing-strategy` to produce evidence that covers rendered states, contract/error handling, and one real visible flow where feasible. Do not let ideal mocked data stand in for runtime integration evidence.
|
|
166
166
|
- When live infrastructure is required, keep it explicit and separate from default fast tests.
|
|
167
|
-
-
|
|
167
|
+
- After code/test edits, self-check and invoke `code-review` automatically before completion. Persist review status; timeout, empty output or inconclusive results remain pending, never passed.
|
|
168
168
|
- For independent review runs, prefer bounded diff/file input over broad repo prompts. Load the repository's local rules such as `AGENTS.md` or equivalent review context when available, skip generated/docs noise unless it is the review target, and make timeout/inconclusive results recoverable through a durable pending record.
|
|
169
169
|
- For product/spec normalization, standards-to-health-gate work, or any change that edits a shared deterministic gate/verifier (workspace verifier, conformance script, contract-coverage gate, status-source validator, CI harness, continuation-state checker, or a cross-repo contract/status/version/release/compatibility coordination surface), this workflow classifies the artifact before implementation — `spec/plan`, `gate design`, `gate implementation`, `status sync`, or `runtime/code` — without delegating that decision (do not delegate the spec-vs-plan-vs-code decision to `feature-risk-router`), then routes every shared-gate change through `feature-risk-router` and applies its `shared-gate` decision before shared branch push or MR merge; a recorded independent adversarial review names concrete objections, their disposition, and the reviewer/tool identity — prefer the session's review/challenge skill, otherwise a ccl-owned independent review (external tools supplement only; same-agent inline prose review only for explicitly low-risk, non-cross-boundary work). Rule/scope/failure/completion semantics changes require a concrete repo-local persistent artifact before editing; a `gate implementation` runs the plan/status verifier(s) before implementation and before claiming the plan active — an explicit status-source validator takes precedence, otherwise run every authoritative non-alias verifier or record why each is not applicable; a verifier gap or unavailable required review/challenge stays `interim` / pending-review. Details live in `references/shared-gate-artifact-classification.md`.
|
|
170
170
|
- Do not use landing labels without matching evidence. `landed` requires the relevant local commit or persisted artifact; `MR-ready` requires branch, push, review artifact, known CI/pipeline status when applicable, known mergeability when applicable, and review status that matches reality; `release-ready` requires the relevant release checks, rollback/mitigation, and runtime verification evidence; `shared-status-ready` requires the owning status or product document to match the real branch/MR/review/verification state. For local-only or exploratory slices, report the actual uncommitted/unpushed state and use a local status label instead of treating MR evidence as mandatory.
|
|
@@ -187,16 +187,16 @@ At each stage boundary, walk the per-stage entry-state enumeration in [Stage-Ent
|
|
|
187
187
|
|
|
188
188
|
### Pre-Final Continuation Gate
|
|
189
189
|
|
|
190
|
-
Run this gate before finalizing a product R&D turn after any delivery slice lands
|
|
190
|
+
Run this gate before finalizing a product R&D turn after any delivery slice lands, on every user reply immediately following an assistant message that states or implies a next action, and on any explicit continuation request. The reply need not first be classified as assent. Recover the intended action from the current request and relevant conversation; a malformed or absent marker alone never selects `blocked:`. Report `continuing: <action and scope>` for the work you will execute, or `blocked: <action and scope> — <specific blocker>` when no authorized work can proceed. A blocked dependent action may remain pending while a different authorized action continues. Apply landing checks only to actual landing claims; an already-authorized local investigation does not require inventing a prior landing. Details: `references/pre-final-continuation-gate.md` (Gate triggers and outcome contract).
|
|
191
191
|
|
|
192
192
|
1. Confirm the landing state from real evidence (local branch, remote sync, MR/review artifact, CI/pipeline when applicable, review/challenge status when required, status-doc sync, dirty worktree), proving the landing before reading any document (for the remote-backed default, fetch/update the target ref from its remote immediately before classifying the slice landed) per `references/pre-final-continuation-gate.md` (Landing-state proof); content/tree/patch equivalence never by itself proves a slice landed.
|
|
193
193
|
2. Inspect the current product/status source of truth, issue list, repo-local next-step artifact, unresolved acceptance item, or direct user continuation instruction for the next implied slice. **Reconcile it against the current branch/MR/merge/CI/tag state from step 1 before deriving: contradicting reality means stale — stop, repair the status source first, and do NOT derive from the stale source or a git-log/grep scan** (`references/pre-final-continuation-gate.md` §Status-source reconciliation).
|
|
194
194
|
- **Deferred-evidence continuation check (`DFE-CONT`).** When real/runtime evidence is due (named by an acceptance item, status source, landing-evidence row, required gate, user correction, or because it is the behavior's only meaningful proof) yet deferred, blocked after remediation, skipped at finalization, or replaced by local/mock verification. Report deferred real evidence as `interim`/outstanding; do NOT report the turn complete while it is outstanding. A local/mock substitution is terminal only when a cited **non-agent** anchor — **agent-authored or agent-co-edited status/router/gate/handoff text never satisfies this** — names the same evidence, declares the deferral terminal, and carries the outstanding command/source forward for the active slice/ref. Never add verifier/config/test hardening motivated only by missing deferred evidence; never auto-continue past the pending gate. **Load `references/pre-final-continuation-gate.md` before treating any deferral as terminal** — it owns the valid/invalid-anchor list and hardening boundary.
|
|
195
|
-
- **Affirmative-assent binding rule** lives in `references/pre-final-continuation-gate.md` §Assent binding —
|
|
196
|
-
3. Continue automatically
|
|
197
|
-
4. Stop only for an explicit stop/pause instruction, a user-requested status-only answer, a
|
|
195
|
+
- **Affirmative-assent binding rule** lives in `references/pre-final-continuation-gate.md` §Assent binding — load it when recovering a short reply. Bind to the current explicit request or one recoverable concrete proposal, including an unmarked proposal; preserve its scope and existing authority. Ask only if action, scope, or required authority remains unresolved after recovery. A status remark or output marker cannot substitute for a proposal or permission; self-classifying the reply or marker away is never an exit from carrying out an already-clear request.
|
|
196
|
+
3. Continue automatically with a clearly owned, verifiable, low-risk next slice from an explicit task/status/acceptance source or active user continuation, within accepted scope and existing authority. Apply the eligibility and stop conditions in `references/pre-final-continuation-gate.md`. Necessary fixes, tests and review inherit task authorization; a reviewer-budget flag triggers a method checkpoint and cumulative-history record, not renewed permission. Explicit user limits still govern. Existing configured internal developer-self-use metered model/tool accounts aren't an external purchase here.
|
|
197
|
+
4. Stop only for an explicit stop/pause instruction, a user-requested status-only answer, or a concrete blocker for the affected action. Block materially differing viable approaches (none dominant-and-reversible) and a fix lacking evidenced cause; load `references/pre-final-continuation-gate.md` for the full stop conditions. **Scope each blocker to its dependent action or claim.** An unproven cause blocks the speculative patch, not available diagnosis; a pending gate blocks dependent landing/completion, not authorized remediation or independent work. Before ending, perform available in-scope diagnosis, owner discovery, remediation, live-handle monitoring or independent work. Quality-gate failures require diagnosis and available related behavior-preserving cleanup before escalation; preserve readability and compatibility, never game counters (`references/refactoring-discipline.md`). Never bypass the blocked gate, invent a pass, widen scope, or substitute unrelated hardening. Stop the task only at the user's stop/status-only instruction or when no safe authorized work remains. With one dominant reversible approach and no applicable stop condition, do not stop at a recommendation: deliver a tested reviewable draft.
|
|
198
198
|
5. If stopping, state the concrete stop reason and the exact evidence checked; an assent-triggered `blocked:` outcome uses the action/scope-plus-blocker form and classifies the turn `interim`. Ask one concise in-turn question when ambiguity or missing authority blocks; explicit stop/pause needs no reconfirmation. A `continuing:` outcome proceeds with the named slice before finalizing. A silent/completion stop is invalid. Do not send a completion-only, solved, fixed, or fully-closed final response after a merge/sync while a required review/challenge is pending or inconclusive; report interim or blocked with the next unblock step.
|
|
199
|
-
6. **Assent-outcome closeout check.**
|
|
199
|
+
6. **Assent-outcome closeout check.** Every user reply immediately following an assistant message that states or implies a next action requires a visible `continuing:` or `blocked:` outcome before finalizing, even if the reply is not classified as assent; every explicit continuation request does too. Missing markers never waive it. Reconcile the current request, original proposal, scope/authority changes, tool/output evidence, and remaining blockers. Respect a current explicit stop or status-only request; name that reason in the blocked outcome without executing the prior proposal. Otherwise `continuing:` must be followed by execution in the same turn; a promised next step is not execution. If part remains blocked, report its pending state and independent work performed. A status-only handoff cannot discharge an unexecuted accepted action. Repair marker formatting; for short assent, if the original proposal cannot be recovered verbatim, select `blocked:` and ask. Formatting never requires clarification. Do not silently drop an accepted action or claim a pending gate passed.
|
|
200
200
|
|
|
201
201
|
If a user later challenges "why did you stop" or "was the rule too weak", treat it as a product workflow defect: route through `skill-extraction-workflow`, strengthen the smallest owning skill or validation checklist, validate the diff, and only then claim the process issue is solved.
|
|
202
202
|
|
|
@@ -180,7 +180,7 @@ Before release, confirm:
|
|
|
180
180
|
| **Change Lead Time** | commit 到 prod 的时长 | — |
|
|
181
181
|
| **Change Failure Rate (CFR)** | release 中需要 hotfix / rollback / fail forward 的比例 | — |
|
|
182
182
|
| **Failed Deployment Recovery Time** | failed deployment 恢复时长 | 2023 年 DORA 重命名(原 MTTR)|
|
|
183
|
-
| **Deployment Rework Rate** |
|
|
183
|
+
| **Deployment Rework Rate** | 由生产事故引发的非计划部署占全部部署的比例 | 2024 年新增;[当前 DORA 口径](https://dora.dev/guides/dora-metrics/) |
|
|
184
184
|
|
|
185
185
|
Elite / High / Medium / Low 具体阈值**按当年 DORA Annual State of DevOps Report 取**(不同年份数字略有变化,本 ref 不固定数字以免过时)。
|
|
186
186
|
|
|
@@ -10,7 +10,7 @@ a triggered diff, and whenever the candidate diff changes after a review.
|
|
|
10
10
|
|
|
11
11
|
## Recorded review artifact
|
|
12
12
|
|
|
13
|
-
(a) a recorded independent adversarial review is the gate for all triggered work — prefer an available review/challenge skill discovered in the session when suitable, otherwise a ccl-owned independent review (the external skill supplements, it is not itself the required gate); save an artifact naming concrete objections, their disposition, and the reviewer or tool identity; same-agent inline prose review is acceptable only for explicitly low-risk, non-cross-boundary work.
|
|
13
|
+
(a) a recorded independent adversarial review is the gate for all triggered work — prefer an available review/challenge skill discovered in the session when suitable, otherwise a ccl-owned independent review (the external skill supplements, it is not itself the required gate); save an artifact naming concrete objections, their disposition, and the reviewer or tool identity; same-agent inline prose review is acceptable only for explicitly low-risk, non-cross-boundary design-only work with no implementation diff. Once code or executable tests change, invoke `code-review` automatically under its development-completion rule; green tests or low risk do not replace that invocation.
|
|
14
14
|
|
|
15
15
|
## Binds to the implementation diff
|
|
16
16
|
|
|
@@ -85,21 +85,30 @@ If over-polishing around deferred evidence recurs, or the user flags it as a reu
|
|
|
85
85
|
|
|
86
86
|
## Continuation-proposal output contract (session-wide coverage)
|
|
87
87
|
|
|
88
|
-
The entrypoint
|
|
88
|
+
The entrypoint uses `proposed-next:` as an observable handoff, not an authorization token. The contract follows the delivery across status answers, questions, reviews, and dispatched owners, before or after a slice lands. Progress messages need no ritual marker to preserve a user's request.
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
-
|
|
90
|
+
At the start of the next turn, recover intent in this order:
|
|
91
|
+
|
|
92
|
+
1. Follow the current explicit user instruction, including a correction, changed scope, stop, or status-only request.
|
|
93
|
+
2. For short assent, read back the original wording of the most recent still-active concrete proposal and check that later messages or task state have not withdrawn or superseded its action, scope, or authority. Quote that original proposal when stating the recovered action and scope; a summary or paraphrase alone cannot bind short assent. If recovery adds an action or broadens that quoted scope, select `blocked:` and ask. One recoverable action can bind with or without a marker; a stale, repeated, or conflicting marker is an assistant formatting defect to repair.
|
|
94
|
+
3. If materially different proposals remain unresolved, or scope/authority is still unclear, ask one targeted question about that uncertainty. Do not ask the user to repair a marker or repeat a clear instruction. A marker alone never supplies missing authority.
|
|
95
|
+
|
|
96
|
+
Use the active owner's entry and safety gates for the recovered action. An authorized task includes necessary fixes, tests and review by default; neither a router nor a dispatched owner may discard that authority by relabeling its turn or exhausting an internal review sequence. Apply the owning review checkpoint and record `continuation_basis=existing-task-scope` with cumulative history in the caller-owned task artifact, not runtime JSON. Legacy `human_decision_required` / `continuation_authorization_required` values first require checking existing authority, not asking again. Explicit user cost, round-count and stop limits prevail; new scope, missing authority or real tradeoffs need a decision. Continuation grants no merge, publication or waiver authority. This is a prose contract, not a host-enforced hook; it cannot prove compliance by a task that never loads it.
|
|
94
97
|
|
|
95
98
|
## Gate triggers and outcome contract
|
|
96
99
|
|
|
97
|
-
|
|
100
|
+
An eligible next slice comes from an explicit status/task/acceptance source or active user continuation, is low-risk, local-only/already-authenticated, in accepted scope, clearly owned and verifiable with existing commands. It needs no destructive action, external purchase/financial commitment, production access, legal/compliance/product-strategy decision or high-impact architecture choice. Existing configured internal developer-self-use metered model/tool accounts are not an external purchase. Apply the following conditions to each action.
|
|
101
|
+
|
|
102
|
+
Action-scoped stop conditions are: an explicit stop/pause instruction; a user-requested status-only answer; a failed, pending or inconclusive required gate; a dirty/conflicting worktree that cannot be isolated; a required environment unavailable after remediation; a high-impact product, architecture or compliance decision; a destructive action; an external purchase or financial commitment; unclear ownership; ambiguous assent; missing stricter authorization; materially different viable approaches with none dominant and reversible; a speculative fix without evidenced cause; or no low-risk slice. Apply each condition to the affected action, then check for available authorized diagnosis or remediation before stopping the whole task.
|
|
103
|
+
|
|
104
|
+
Check continuation on every user reply immediately following assistant prose that states or implies a next action, and on any explicit continuation request, regardless of landing status. Do not first require classifying the reply as assent; visibly report the continuing or blocked outcome even when the reply changes scope or stops the proposed action. Short replies include `ok`, `yes`, `可以`, `好`, `继续`, `proceed`, `do it`, `go ahead`, and `👍`; interpret them against the recovered action rather than formatting alone.
|
|
98
105
|
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
106
|
+
- Select `continuing: <action and scope>` when that action is clear and authorized, then execute it in the same turn. A tool call and its result or a produced artifact establish execution; the label alone does not.
|
|
107
|
+
- A blocked patch, review, or landing does not block every action. Keep that dependent action/claim pending while continuing available diagnosis, bounded remediation, monitoring of the existing live handle, or independent accepted work. These paths retain their own scope and permission checks; they cannot bypass the blocked gate or substitute unrelated hardening for missing evidence.
|
|
108
|
+
- A failed quality gate calls for a repair that preserves its purpose. Before asking the user to choose a workaround, inspect and perform a safe structural cleanup related to the current change when available, then rerun the gate and affected tests. Follow [refactoring discipline](refactoring-discipline.md#responding-to-quality-gates): preserve behavior, compatibility and readability; do not shrink identifiers or necessary comments, weaken a baseline or rewrite history solely to make the counter pass. If no safe in-scope repair remains, report the evidence and the actual decision needed.
|
|
109
|
+
- Independent work must neither depend on the pending verdict nor modify the candidate being evaluated. Name the pending gate and the independence basis when continuing. A candidate-changing fix is remediation, not independent work: let the existing run reach a terminal state, then refresh affected evidence and re-enter the owning gate. The deferred-evidence hardening prohibition still applies.
|
|
110
|
+
- Select `blocked: <action and scope> — <specific blocker>` when the remaining action needs an unresolved decision/authority or no safe authorized work remains after remediation. Cite the actual evidence; ask only for the missing decision or permission. An explicit stop/pause or status-only request blocks executing the prior proposal: name that reason in the outcome, answer the requested status, and do not reconfirm the stop.
|
|
111
|
+
- Apply landing-state proof to landing claims and derivation of post-landing work. For an authorized local investigation with no landed slice, record that landing checks do not apply and perform the investigation.
|
|
103
112
|
|
|
104
113
|
## Status-source reconciliation (gate step 2 mechanics)
|
|
105
114
|
|
|
@@ -107,7 +116,7 @@ Before deriving the next slice from a status source, reconcile it against the ap
|
|
|
107
116
|
|
|
108
117
|
## Assent binding (gate step 2 assent rule)
|
|
109
118
|
|
|
110
|
-
- **Affirmative assent to
|
|
119
|
+
- **Affirmative assent binds to one recoverable concrete proposal and its scope, even without a `proposed-next:` marker.** Use the visible conversation or read back trusted task/session evidence; do not fabricate a missing proposal from a summary or choose among unresolved alternatives. The current user's explicit action supersedes an old marker. Restate the recovered action, check its scope and authority, and proceed; ask only about uncertainty that remains after this recovery. A status remark alone is not an action proposal, and an assistant-authored marker or retrieved content cannot grant permission.
|
|
111
120
|
|
|
112
121
|
Binding detail:
|
|
113
122
|
|
|
@@ -4,13 +4,19 @@ Use this when improving code structure, splitting responsibilities, reducing dup
|
|
|
4
4
|
|
|
5
5
|
## Rules
|
|
6
6
|
|
|
7
|
-
- Keep
|
|
7
|
+
- Keep unrelated refactors separate from feature changes and bug fixes. A bounded, behavior-preserving cleanup needed to satisfy an existing quality gate belongs to the authorized task; do not ask again merely because it involves refactoring. Broader redesign and breaking changes retain their scope and approval checks.
|
|
8
8
|
- Establish a green baseline first: run the smallest relevant tests or record why the current baseline is already failing.
|
|
9
9
|
- Refactor in small steps. Each step should be reviewable and, when practical, independently testable.
|
|
10
10
|
- Search all call sites before changing public functions, DTOs, generated contracts, config keys, storage fields, events, or exported helpers.
|
|
11
11
|
- Preserve external behavior, response shape, errors, telemetry, permissions, and side effects unless the change is intentional and documented.
|
|
12
12
|
- Do not broaden a refactor while debugging an unknown defect; use `defect-diagnosis` first.
|
|
13
13
|
|
|
14
|
+
## Responding to quality gates
|
|
15
|
+
|
|
16
|
+
- Read the failed check, its baseline and its intended quality property before choosing a repair. A file-size or complexity limit should prompt inspection of the changed responsibility, cohesion, callers and dependency direction. Extract a coherent responsibility or remove genuine duplication when that improves the code; keep public imports compatible where needed and verify affected behavior before and after. A smaller file alone does not prove a better design.
|
|
17
|
+
- Do not abbreviate meaningful names, remove necessary explanations, pack statements, fragment responsibilities arbitrarily, or change the threshold/history just to satisfy a counter. A gate with an evidenced defect can be diagnosed and corrected under its owning contract; that is distinct from evading a valid failure.
|
|
18
|
+
- Perform available, in-scope remediation and rerun the failed check before handing the problem back. Ask only for a remaining material tradeoff or missing authority after this work. Force-pushing, waiving the gate and accepting lower readability are not substitutes for inspecting a safe structural repair; a failed gate grants none of those permissions.
|
|
19
|
+
|
|
14
20
|
## Impact Analysis
|
|
15
21
|
|
|
16
22
|
Before changing a shared shape or function, identify:
|
|
@@ -5,7 +5,7 @@ description: 用 Python 写接口 / FastAPI / Django model / Celery 任务 / pyt
|
|
|
5
5
|
|
|
6
6
|
# Python Service Dev
|
|
7
7
|
|
|
8
|
-
Use this for implementation of Python backend products, services, microservices, AI-service hosts, workers, packages, and batch tools. For new backend products, implement the smallest deployable or package shape justified by ownership, data boundary, runtime isolation, scaling, release cadence, and rollback needs. It should adapt to the repository in front of you, but the workflow is independent of any prior codebase.
|
|
8
|
+
Use this for implementation of Python backend products, services, microservices, AI-service hosts, workers, packages, and batch tools. For new backend products, implement the smallest deployable or package shape justified by ownership, data boundary, runtime isolation, scaling, release cadence, and rollback needs. It should adapt to the repository in front of you, but the workflow is independent of any prior codebase. After code/test edits, self-check and invoke `code-review` automatically before completion.
|
|
9
9
|
|
|
10
10
|
## Skill Routing
|
|
11
11
|
|
|
@@ -12,7 +12,10 @@ description: 改动范围 / 影响范围 / scope / 需求拆分 / MVP 边界 /
|
|
|
12
12
|
1. **P0 核心 in/out 由 `human-decision` 关闭。** agent 不得自行决定,也不得决定产品目标、核心路径、成本级别或验收承诺。
|
|
13
13
|
2. **as-is 证据不裁决 should-be 范围。** 代码、数据、架构等描述性证据不能自行决定本轮改不改。
|
|
14
14
|
3. **边界要可审查。** in/out 写成行为边界,不用「优化体验」这类不可判定的模糊标签。
|
|
15
|
-
4.
|
|
15
|
+
4. **先判 appetite 是否适用,再记录投入与取舍。** [Shape Up 的 appetite](https://basecamp.com/shapeup/1.2-chapter-03) 用于在固定投入下调整范围;它不是每张影响范围表的必填前提。
|
|
16
|
+
- 任务要求投入决策,或已有适用的投入上限时,记录已确认上限和超出时可调整的范围。取舍未定就保留已知上限,把未知子项标 `open`,继续交付其余字段;不得自行砍掉核心范围、降低既有验收要求或承诺按期完成。
|
|
17
|
+
- 人工兜底只在业务连续性、降级或已批准决策确实需要时填写;不需要时写明依据,不为填表虚构人工接管。
|
|
18
|
+
- 仅做影响范围盘点、未涉及投入决策时,可按任务边界记 `not-applicable`。用户要求省略展示细节时遵从该要求,已确认约束和未决事项保留在关闭表中;省略展示不等于撤销既有约束或关闭未决承诺。
|
|
16
19
|
5. **关闭表只补自己那部分。** 唯一 canonical 是 `requirement-doc-writer/references/requirement-closure-contract.md`。本技能按复合字段子项补版本、范围、appetite、依赖和验收,逐项记录推导、决策权和决策证据;只能自动填写单个低风险、可逆的非核心展示/表达细节(decision_authority 记 `bounded-agent-policy`,且须有可引用的已批准 policy),**任一适用子项 open 时复合字段和整行保持 open/blocked**。
|
|
17
20
|
6. **「非目标」在这里是变更级**——本轮明确不改、延后、保持兼容、无需迁移的对象。意图级的「本轮不追求什么目标」属 `requirement-intent`。同理「验收」在这里是每个切片的验收边界与不验收项,不是功能点 pass/fail。
|
|
18
21
|
|
|
@@ -30,7 +33,7 @@ description: 改动范围 / 影响范围 / scope / 需求拆分 / MVP 边界 /
|
|
|
30
33
|
| Out of scope(变更级非目标) | 明确不改、延后、保持兼容、无需迁移的部分 |
|
|
31
34
|
| 受影响对象 | 角色、页面、入口、API、数据、运营规则、通知、报表、权限、文档 |
|
|
32
35
|
| 版本切片 | MVP、后续版本、迁移/兼容切片、回滚/降级边界 |
|
|
33
|
-
| Appetite / timebox |
|
|
36
|
+
| Appetite / timebox | 适用性与依据;适用时记录已确认投入上限、超限取舍和必要的兜底 |
|
|
34
37
|
| 依赖 | 上游决策、外部系统、数据准备、设计、法务/运营/支持动作 |
|
|
35
38
|
| 风险点 | 权限、隔离、计费/配额、删除/覆盖、数据迁移、发布复杂度 |
|
|
36
39
|
| 验收范围 | 每个切片的可观察验收边界和不验收项 |
|
|
@@ -41,7 +44,7 @@ description: 改动范围 / 影响范围 / scope / 需求拆分 / MVP 边界 /
|
|
|
41
44
|
1. 锁定目标与输入:引用已澄清需求或盘点事实。缺某条 as-is 事实**不自动**回 `requirement-baseline`——标为未确认、写明缺口和取得方式,继续交付范围表;只有用户点名要现状清单、或缺口大到范围表无法成立时才交回,后者是决策不是 agent 的判断题。
|
|
42
45
|
2. 列受影响对象:用户、流程、界面/API、数据、权限、运营、文档逐项过一遍。
|
|
43
46
|
3. 写 in/out scope:按硬约束 2、3。
|
|
44
|
-
4.
|
|
47
|
+
4. 切版本:P0、后续、迁移、兼容、回滚/降级分别列清;按硬约束 4 判断并填写 appetite。
|
|
45
48
|
5. 标依赖和风险:把安全 4 问命中项、跨团队/系统依赖、数据风险拉出来。
|
|
46
49
|
6. 更新 `需求点关闭表`(按硬约束 5)。
|
|
47
50
|
7. 写验收范围:每个切片对应 pass/fail 条件,明确不验收项;安全命中项的负向用例写进验收范围。
|
|
@@ -63,7 +66,7 @@ description: 改动范围 / 影响范围 / scope / 需求拆分 / MVP 边界 /
|
|
|
63
66
|
- in/out 每一项都是可审查的行为边界,没有模糊标签。
|
|
64
67
|
- 受影响对象十类(角色/页面/入口/API/数据/运营规则/通知/报表/权限/文档)逐类过了一遍,不适用的显式写「无」。
|
|
65
68
|
- 每个切片都有可观察的验收边界**和**不验收项。
|
|
66
|
-
- appetite
|
|
69
|
+
- appetite 按硬约束 4 判定适用性;适用子项有决定或明确的未决状态,不适用有依据。未知项不被抹掉,也不阻断其余范围材料。
|
|
67
70
|
- P0 核心 in/out 标了 `human-decision`,没有被 agent 自行关闭。
|
|
68
71
|
- 关闭表里任一适用子项 open 时,复合字段和整行保持 open/blocked。
|
|
69
72
|
- 安全 4 问:记了「无命中」,或四项逐条答案 + 写明所依据的 canonical 文件名;命中项的负向用例已在验收范围里。
|
|
@@ -77,7 +80,7 @@ description: 改动范围 / 影响范围 / scope / 需求拆分 / MVP 边界 /
|
|
|
77
80
|
- Out of scope(变更级非目标):
|
|
78
81
|
- 受影响对象:
|
|
79
82
|
- 版本切片:
|
|
80
|
-
- Appetite / timebox
|
|
83
|
+
- Appetite / timebox(适用性与依据;适用时写投入、取舍与必要兜底):
|
|
81
84
|
- 依赖:
|
|
82
85
|
- 风险点:
|
|
83
86
|
- 验收范围(含不验收项):
|
package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ description: 复盘 / 沉淀 / 总结经验 / 补进技能 / 技能缺陷 / 流
|
|
|
5
5
|
|
|
6
6
|
# Skill Extraction Workflow
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Turn observed experience into reusable skills without business-specific details. `writing-skills` and `skill-creator` define format and authoring discipline; this skill covers mining, filtering, generalizing, validating and landing. When shared-skill changes are ready, invoke `code-review` automatically before completion. Apply `code-review/references/development-completion.md` and this owner's required review/challenge gate.
|
|
9
9
|
|
|
10
10
|
## Start here (30 秒定位)
|
|
11
11
|
|
|
@@ -137,7 +137,7 @@ Use this skill to turn observed experience into durable agent skills without cop
|
|
|
137
137
|
- The mechanical backstops are (a) the closeout gate — a committed skill-change with neither a visible in-session `skill-extraction-workflow` invocation nor the round's durable charter/target-output record is `interim` — and (b) **user-signal escalation**: you generally cannot self-count misses you did not notice, so a user-pointed-out under-trigger is a recurrence check across the whole session (even other tasks) and, on recurrence, escalates to tightening the always-on discipline rather than landing another narrow per-case trigger.
|
|
138
138
|
- **Firing-point-placement corollary:** when the SAME meta-class (a precise gate walked past at the routing → pre-code/design transition) recurs at a *new* lifecycle sub-point despite prior bootstrap-salience + the closeout gate, the durable lever is **moving the owning gate's firing point ONTO the transition itself** (pre-substance-draft AND pre-first-impl-edit) and sharpening *name→invoke* at the SAME transition — naming/knowing an owner is NOT invoking/loading it, and a named-but-unloaded owner's mechanical rules never fire — NOT another bootstrap/per-case bullet or more prose. **Record-field corollary (the forgery surface):** any field that NAMES an owner is fillable without invoking that owner, and filling it is what *feels* like discharging the gate, so it carries an explicit invoke bar on its triggered values. The self-detect firing point's authority boundary and observed shape, the output-shape and option-set siblings, the invoke-bar set-diff mechanics, the worked recurrence-chain, and the landed owner-dispatch implementation: `references/firing-point-placement.md`.
|
|
139
139
|
- **Run your own adversary to convergence BEFORE any "done / fixed / passing / covered / converged / complete" claim — your own such claim is the least-trustworthy thing you emit.** For any non-trivial completion/coverage/convergence claim, you must have already run — **yourself, not deferred to the user** — the verification or adversarial pass that would catch its failure, to a **clean fresh result** (a first clean pass on the current candidate, never a "confirm my fix" pass), OR **downgrade the claim to `interim` and name what you ran vs. didn't**. "Covered / converged / already handled" is a claim, not a status — back it with firing-path or clean-pass evidence or do not emit it; this self-adversary duty never narrows the mandatory dual-track challenge. That pass is a **walked enumeration over the properties the candidate asserts, never a re-read**: a property whose killing mutation you cannot name was never verified; **a mutation you did not APPLY is a hypothesis, not evidence** (bound its blast radius; where no isolated path exists record the property `unverified`); **prove the oracle can fail before trusting its clean verdict**; **a failing anchor is first a question about the ANCHOR, not a verdict on the implementation**; a clean run is reported with the dimensions it crossed, walked before values; a property with no contradicting observation is `unverified`, never counted as audited. A scoped "X verified; Y not run" is an interim checkpoint, **not** `done`/`complete`/`landed`, unless a **risk owner — the user/maintainer, never the agent self-accepting — explicitly accepts the gap AND it is tracked to that owner** (agent self-labeling "risk accepted" or "deferred" does not qualify; scoping is a downgrade, never a license to call the narrowed slice done). **Recurrence signal:** a user prompting you to keep digging / disputing a "covered/converged/done" is a premature-completion signal — on the **2nd** such correction in a session (even across different tasks) escalate to tightening this discipline, not just fixing the one case (per the repeated-correction escalation above). The full method — mutation enumeration, the applied-mutation discipline and its blast-radius bound, independent-oracle validation, the dimension walk (`testing-strategy` owns the axis list), re-owe-after-fixes, graded-verdict calibration, the failing-anchor section, and the recognition-dependent honesty caveat: `references/dual-track-review-gate.md` §Self-audit.
|
|
140
|
-
- Automatically trigger durable learning when extraction work exposes a reusable failure — **and when ordinary delivery work does, capture it here too, but without extraction taking over the delivery**: let the active owner (`product-rd-workflow` / `defect-diagnosis` / `testing-strategy` / …) handle the immediate work first, then route the durable lesson here. **For a premature-stop correction after affirmative continuation**,
|
|
140
|
+
- Automatically trigger durable learning when extraction work exposes a reusable failure — **and when ordinary delivery work does, capture it here too, but without extraction taking over the delivery**: let the active owner (`product-rd-workflow` / `defect-diagnosis` / `testing-strategy` / …) handle the immediate work first, then route the durable lesson here. **For a premature-stop correction after affirmative continuation**, rerun the active owner's current continuation/blocking gate against current state (for product R&D, Pre-Final Continuation Gate steps 1–6, with landing checks only where applicable). Proceed when a literal binding exists: one recoverable concrete proposal and scope plus the user's assent, even without a marker, or the current user explicitly naming the paused action and scope. Never fabricate or broaden that binding, or copy real conversation text into shared records. Ask only if action, scope, or required authority remains unresolved after recovery; a new user message or changed gate requires reassessment, not automatic reconfirmation. Keep newly blocked dependent actions pending while continuing available authorized diagnosis, remediation, or independent work. Correction RCA and extraction must not delay that recovery or bypass a gate. After delivery recovery, correction RCA plus durable prevention and verification are still due before claiming this process defect complete; otherwise report `interim`. Binding paths, trusted evidence, and invalid-`blocked:` recovery: `references/resume-paused-delivery.md`.
|
|
141
141
|
- The trigger is a correction about *reusable skill/process behavior*, NOT every bug/QA/review nit handled inside its own owner skill. Do not wait for the user to say "沉淀": if the user points out a missed source, missed sibling skill, shallow rule, overclaim, domain leakage, missing trigger, missing verification, repeated correction, **or that this workflow should have been invoked at all (an under-trigger / "should you have used 提炼/复盘" correction, including outside an active extraction)**, run correction RCA, update the smallest owning skill/reference/validator, and verify the prevention point before finalizing the turn.
|
|
142
142
|
- When the user asks whether a lesson was durably landed after a failed extraction, verify the actual skill diff or file content first. Do not answer from memory or intent. If the prevention rule is not present in the owning skill, add it or state that it has not been durably landed.
|
|
143
143
|
- **Consolidate and retire rules; a skill's rule set must not grow monotonically.** Every correction adds a guard, but an N-bullet wall on one theme is itself the over-prescription/unreadability failure, and "just append another bullet" is how it regrows.
|