.agents/skills/implementation-strategy/SKILL.md
origin first, and only fall back to local tags when remote tags are unavailable:
BASE_TAG="$(.agents/skills/final-release-review/scripts/find_latest_release_tag.sh origin 'v*' 2>/dev/null || git tag -l 'v*' --sort=-v:refname | head -n1)"
echo "$BASE_TAG"
Record these four items in the plan or working notes, and update them before widening or narrowing the implementation:
none when absent.If the intentionally unsupported cases cannot be stated clearly, do not start by adding a general resolver. First define a narrower behavior contract. If no adequate supported alternative exists, add one only when the task requires it; do not invent one speculatively.
A released-version reproducer proves reachability, not support. Treat the exact shape as a compatibility requirement only when intentionally covered by public documentation, examples, tests, or typing; required by a durable boundary; or backed by concrete user reliance or maintainer intent. Otherwise record the risk and prefer early rejection with an existing supported alternative.
Repeat this gate before editing each new feedback batch:
Review checkpoint:
- Root cause and required behavior:
- Compatibility evidence and unsupported cases:
- Source of truth:
- Behavior-space change: narrows / unchanged / widens
- Action: focused patch / complexity reset / reject as unsupported
Classify each finding as a required-behavior defect, supported compatibility requirement, another combination of the same implementation dimensions, or unrelated issue. Widening the behavior space requires new contract evidence.
If a second related finding would add another condition, protocol hop, compatibility case, or test permutation to the same abstraction, stop patching and run the complexity reset. Continue only when concrete evidence puts the exact case in the required or supported contract.
Example: if successive findings require traversing a direct wrapper, partial, nested wrapper, descriptor, and bound method, do not add another hop. Unless arbitrary wrapper graphs are supported, retain the required plain callable behavior and reject ambiguous wrappers before invocation.
main directly unless they already define a supported durable boundary.Stop extending the current design when:
When a trigger fires:
Do not wait for the user or reviewer to request this reset when the signals are already present.
Before declaring the design complete, answer all of these with concrete evidence:
RunState, session persistence, and other explicitly durable serialized state as compatibility-sensitive across commits, processes, and machines.strict_feature_validation=True, while keeping the default path compatible through warning, ignoring unsupported data, or a clearly non-empty placeholder.model_settings parameter. Preserve released constructor arguments, typed-object behavior, and provider request payloads when adding dictionary support.None semantics deliberately for public configuration. For example, use separate meanings for "feature disabled or no SDK limit", "use SDK default limits", and "disable only this specific limit" rather than relying on implicit truthiness checks.When this skill materially affects the implementation approach, state the decision briefly in your reasoning or handoff, for example:
Compatibility boundary: latest release tag v0.x.y; branch-local interface rewrite, no shim needed.Implementation scope contract: support X; preserve Y; reject Z before side effects; use supported alternative W, or none exists.Complexity reset: repeated edge-case combinations show the approach is too broad; redesign from the original requirement instead of adding another branch.