Task planning and approach strategy for NIC. Use when starting any non-trivial task, reading issues or specs, planning before implementing, or when asked to create a plan for a change.
70
86%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
containsDangerousChars()pkg/apis/configuration/v1/types.go)pkg/apis/configuration/validation/)internal/k8s/)internal/configs/)internal/configs/version1/ or version2/)internal/nginx/)charts/nginx-ingress/)containsDangerousChars() on user strings reaching NGINX configzz_generated.deepcopy.go manuallyFor any change, ask:
containsDangerousChars() or appropriate sanitizertypes.go? → Run make update-codegen then make update-crdsnginx.ingress.tmpl AND nginx-plus.ingress.tmpl (or v2 equivalents) if the directive is shared; Plus-only directives go in the Plus template alonevalues.yaml, values.schema.json, and helmunit testsmake test-update-snapsmake telemetry-schemaDo not report a task as complete until every applicable box is ticked. These are the steps most often skipped.
| Condition | Required action | Verification |
|---|---|---|
Edited any .tmpl | Snapshot fixture added and regenerated | git diff -- '**/__snapshots__/**' is non-empty and shows the new directive |
Edited a template struct (version1/config.go, version2/http.go, version2/stream.go) | Fixture populates the field, snapshots regenerated | Same as above |
Edited pkg/apis/**/types.go | make update-codegen && make update-crds | git status shows regenerated pkg/**, config/crd/bases, deploy/crds*.yaml, docs/crd/ |
Edited telemetry Data / NICResourceCounts | make telemetry-schema | No diff on re-run |
| Added/changed imports | go mod tidy | go.mod / go.sum clean |
| Edited chart templates or values | testdata + helmunit case | charts/tests/__snapshots__/ diff is non-empty |
| Added a pytest marker | Registered in pyproject.toml | Suite runs under --strict-markers |
| Any of the above | make test then make lint | Both pass |
Snapshot rule: regenerating without adding a fixture produces an empty diff, which is a silent failure, not a success. If make test-update-snaps changes nothing after a template edit, you have not tested the feature.
| Scope | Indicators | Action |
|---|---|---|
| Trivial | Typo, docs, comment fix | Fix directly, no plan needed |
| Small | Single layer, <50 lines, no API change | Brief plan → implement → test |
| Medium | 2-3 layers, new field or annotation | Detailed plan → implement layer by layer → test each |
| Large | New subsystem, new policy type, cross-cutting | Write plan document → get approval → implement in stages |
types.go without running codegenmake telemetry-schema after touching telemetry data typesWhen a change spans multiple layers, implement in this order:
types.gomake update-codegen && make update-crdspkg/apis/configuration/validation/version1/ or version2/internal/configs/.tmpl files (OSS + Plus)make update-codegen, make update-crds, make telemetry-schema, make test-update-snaps, then make test and make lint95d3987
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.