[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DAP18QJM7P7N31TYGNJBCP":3,"skill-same:01M6DAP18QJM7P7N31TYGNJBCP":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":6,"ownerHtmlUrl":36,"ownerBlogUrl":37,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M6DAP18QJM7P7N31TYGNJBCP","worker-implement",null,"Implement assigned vertical slice following TDD layers","dayvidpham\u002Fpasture","dayvidpham","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22456875?v=4","01M6CHR0F6J2M4QEHFR85XRNSR","David Huu Pham","01M6DA7X1WB0MK7TTV46SRZK75",1,"MIT","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker-implement\u002FSKILL.md",[],[19,20,21,22,23,24,25],"implement","worker","worker implement","tdd","vertical slice","layers","slice","2026-11-10 10:12:30",false,"---\nname: worker-implement\ndescription: Implement assigned vertical slice following TDD layers\n---\n\n# Worker: Implement Vertical Slice\n\n\u003C!-- BEGIN GENERATED FROM pasture schema -->\n\u003C!-- GENERATED FROM pasture v0.0.33 artifact v1 -->\n**Command:** `pasture:worker:implement` — Implement assigned vertical slice following TDD layers\n\n**-> [Full workflow in PROCESS.md](..\u002Fprotocol\u002FPROCESS.md#phase-9-worker-slices)** \u003C- Phase 9\n\n**[wimpl-plan-backwards]**\n- Given: vertical slice task\n- When: implementing\n- Then: plan backwards from production code path\n- Should not: start with types without knowing the end\n\n**[wimpl-vertical-ownership]**\n- Given: production code path\n- When: implementing\n- Then: own full vertical (types → tests → impl → wiring)\n- Should not: implement only horizontal layer\n\n**[wimpl-import-production]**\n- Given: tests\n- When: writing\n- Then: import actual production code\n- Should not: create test-only export or dual code paths\n\n**[wimpl-verify-production]**\n- Given: implementation complete\n- When: verifying\n- Then: confirm production code path is wired (via code inspection or safe testing)\n- Should not: rely only on unit tests passing\n\n**[wimpl-inject-deps]**\n- Given: dependencies\n- When: designing\n- Then: inject all deps for testability\n- Should not: hard-code `new`\n\n**[wimpl-validate-input]**\n- Given: external input\n- When: processing\n- Then: validate with schema\u002Fvalidation tooling\n- Should not: trust raw input\n\n**[frag--validation-cases]**\n- Given: any REQUEST (every request, not only fix-intent ones)\n- When: eliciting (URE), acceptance-testing (UAT), or implementing\n- Then: elicit concrete validation cases — a definition of done plus correct and incorrect behaviours (inputs\u002Fbehaviors that must pass or must fail), confirm the case set with the user in UAT, evaluate the implementation against them, and store failing real-data cases as test fixtures\n- Should not: ship without validation cases; treat validation cases as applying to fix-intent requests only; introduce a request-type axis or enum to gate them\n\n## Task Recovery\n\nThe tracker backend is recorded once in .agents.local\u002Fpasture\u002FEPOCH.md; read that file instead of re-probing. If EPOCH.md is absent, stop and ask the orchestrator to run detection.\n\nRecover from live tracker state at session start and after compaction; never trust cached task rows. Read the `rec:` path from the header and use it as the one entry point: `\"${EPOCH_REC}\" \u003Cop>`. The operation set is closed: create, label, block, note, show, query, ready, status, close, whoami, signal.\n\nStore selection: the adapter reads PASTURE_DB_PATH when set, otherwise the header's `db:`; the probe wrote that value from the same precedence (XDG_DATA_HOME\u002Fpasture\u002Fpasture.db, HOME\u002F.local\u002Fshare\u002Fpasture\u002Fpasture.db, then .pasture\u002Fpasture.db). Use the same selected store for every command. If a recovery query fails, report its actual store path, failed operation, impact, and permission\u002Fschema\u002Fconfiguration repair; failure is not an empty work queue.\n\nThe adapter passes `--namespace` only when EPOCH.md records `namespace:`. That pin wins on both backends. Otherwise it omits the flag. Pasture then derives the namespace itself: PASTURE_NAMESPACE, else the git remote, then file:\u002F\u002F of the working directory. The ledger calls derive_namespace for the header and for every write that has no pin. That function is the one list of remote forms; do not restate it. With no origin, both backends use file:\u002F\u002F of the working directory, so invocations from different subdirectories use different namespaces. Queries without a pin follow that backend's derivation; pass `--all-namespaces` to opt out. When neither a pin nor PASTURE_NAMESPACE is set, pasture reads are unscoped and creation falls back to the git remote, then file:\u002F\u002F of the working directory. Inspect the returned full URI before choosing repository work. Separate reads are not an atomic snapshot.\n\nRun `\"${EPOCH_REC}\" ready`, `\"${EPOCH_REC}\" query --blocked`, and `\"${EPOCH_REC}\" query --status in_progress`. For each referenced active task, run `\"${EPOCH_REC}\" show \"$TASK_URI\"`, `\"${EPOCH_REC}\" show \"$TASK_URI\" --notes`, and `\"${EPOCH_REC}\" show \"$TASK_URI\" --history`. All *_URI variables in examples are inputs bound to full task URIs from an assignment, a verified tracker read, or the URI create printed; never use legacy short IDs. Resolve each variable before execution and quote it as one operand.\n\nCreate prints the new task URI directly. Persist it before any label or note: create-plus-label is non-atomic, so on failure retain the URI and retry only the failed label\u002Fnote operation, never create again. Only open, in_progress, and closed are statuses; blockage is represented by live dependencies and notes, not a blocked status.\n\nAn owner is recorded with `\"${EPOCH_REC}\" label \"$TASK_URI\" owner:\u003Crole>`. That is a claim, not an allocation: an unassigned task stays unassigned until the supervisor allocates it, and repeating an identical claim is not allocation. Never invent an owner.\n\nParent stays open and is blocked by child: `\"${EPOCH_REC}\" block \"$PARENT_URI\" --by \"$CHILD_URI\"`. Reference documents belong in description frontmatter under references:, never fabricated blockers. Workers report evidence and handoffs without closing their slices or leaves; the supervisor closes only after independent review and satisfied gates. Use git agent-commit for local commits. Never install, enable, or modify Git hooks, Git hook path configuration, or pre-commit integration without explicit user approval. Tracker writes are durable; Git history lands separately.\n\nIf the header records `backend: error`, stop before the first mutation: the store exists but cannot be used, and falling back could lose earlier epochs. A mid-epoch write failure retries 3 times. After the third failure, write the attempted record to .agents.local\u002Fpasture\u002Fpending\u002F\u003Ctimestamp>-\u003Cop>.md, keep the recorded backend, and surface the pending record to the user at the next gate. Never switch backends and never drop the record.\n\n## Task Attribution\n\nSelect the current registered author with \"${EPOCH_REC}\" whoami. It prints the author recorded in the header or PASTURE_AUTHOR, and on the pasture backend it confirms that actor with agents show. It does not list agents and it does not invent one. If neither source names an author, it stops: set author: in EPOCH.md or export PASTURE_AUTHOR. Never auto-register or guess an identity during recovery. Every note supplies --author explicitly; machine examples use the pre-registered pasture-system\u002F00000000-0000-0000-0000-000000000000 actor. If it is absent, stop and request registration from the operator rather than claiming registration is fixed. Preserve human intent verbatim and quote historical attribution as evidence, not as a forged new author.\n\n## When to Use\n\nYou have a Pasture task ID for a vertical slice and are ready to implement end-to-end.\n\n## Steps\n\n\n\n### Step 0: Plan backwards from production code path (before implementing)\n\n**Given** Pasture task **when** starting **then** identify production code path first\n\n```bash\n\"${EPOCH_REC}\" show \"${TASK_ID_URI}\" --notes\n# Look for: \"productionCodePath\": \"cli-command subcommand\" or \"api-endpoint\"\n```\n\n**Trace backwards through call stack:**\n```\nEnd: User runs production command\n  ↓ Entry: CLI command.action(...) or API endpoint handler\n  ↓ Service: createXService({ deps }).method(...)\n  ↓ Types: InputType → OutputType\n```\n\n**Identify what you own in each layer:**\n- **L1 Types:** Which types does YOUR slice need? (not other slices)\n- **L2 Tests:** Import actual production code (CLI\u002FAPI), not test-only export\n- **L3 Implementation:** Service method + wiring with real dependencies (not TODO)\n\n### Step 1: Read Pasture task for full context\n\n```bash\n\"${EPOCH_REC}\" show \"${TASK_ID_URI}\" --notes\n```\n\n### Step 2: Update status\n\n```bash\n\"${EPOCH_REC}\" status \"${TASK_ID_URI}\" --set in_progress\n```\n\n### Step 3: Implement your vertical slice in layers\n\n**Layer 1: Types (your slice only)**\n- Create only types YOUR slice needs\n- Don't add types for other slices\n\n**Layer 2: Tests FIRST (import production code)**\n- Write the tests **before** the implementation. The tests ARE the executable\n  verification of the validation-case contract agreed with the user during URE\n  and Plan UAT (the universal validation cases — see [frag--validation-cases]\n  and `C-validation-cases`): definition of done plus correct\u002Fincorrect behaviours.\n- Import actual CLI\u002FAPI package: `import \"myproject\u002Fcmd\u002Ffeature\"`\n- NOT test-only handler: ~~`import \"myproject\u002Finternal\u002Ftesthelpers\u002Ffeature\"`~~\n- Tests will FAIL initially — **red-first** is expected (no impl yet). As you\n  implement Layer 3, progressively fewer tests fail until all are green.\n\n**Layer 3: Implementation + Wiring**\n- Service method for your slice\n- CLI\u002FAPI wiring with real dependencies: `NewService(ServiceDeps{ FS: fs, Logger: logger })`\n- NOT TODO placeholders: ~~`\u002F\u002F TODO: Wire service`~~\n\nFollow:\n- validation_checklist items\n- acceptance_criteria (BDD Given\u002FWhen\u002FThen)\n- tradeoffs from ratified plan\n\n### Step 3b: Evaluate against validation cases (R6, every request)\n\nFor **every** request (not only fix-intent ones), the URE\u002FUAT captured concrete validation cases — the definition of done plus the correct\u002Fincorrect behaviours that must pass or must fail. Per [frag--validation-cases] and `C-validation-cases`:\n- These validation cases are the contract you wrote your Layer-2 tests against (tests-first); evaluate the implementation against each confirmed case.\n- Store the failing real-data cases as **test fixtures** so the behaviour is locked in.\n- The slice is not done until its validation cases pass (red → green).\n\nThere is **no** request-type axis or enum gating this — what a request needs is recognized from the REQUEST\u002FURD, not classified.\n\n### Step 4: Verify quality gates\n\n- Type checking passes\n- Tests pass\n\n### Step 5: Commit safely in a shared worktree\n\nStage **only** the files belonging to your slice, by name:\n```bash\ngit add cmd\u002Ffeature\u002Flist.go pkg\u002Ffeature\u002Fservice.go pkg\u002Ffeature\u002Ftypes.go\ngit agent-commit -m \"feat(feature): add list subcommand\"\n```\n\n**Never** use `git add .`, `git add -A`, or `git commit -am ...` —\nthey sweep peer-worker WIP into your commit.\n\n**Never** use destructive git operations (`git reset --hard`,\n`git checkout HEAD -- \u003Cpath>`, `git stash pop`, `git stash apply`,\n`git clean -fd`, `git branch -D`) on the shared worktree. A\nPreToolUse hook blocks these for worker agents; if you find peer\nwork in your way, post `\"${EPOCH_REC}\" note` and wait for supervisor\ncoordination instead. See **Shared-Worktree Git Discipline** in\n`\u002Fpasture:worker` for the full rationale and the escape hatch.\n\n## Checklist\n\n- [ ] Planned backwards from production code path\n- [ ] Read Pasture task for validation_checklist\n- [ ] Each validation_checklist item satisfied\n- [ ] BDD acceptance_criteria met\n- [ ] Tests import actual production code (not test-only export)\n- [ ] No dual-export anti-pattern (one code path for tests and production)\n- [ ] No TODO placeholders in production code\n- [ ] Service wired with real dependencies (not mocks in production)\n- [ ] Quality gates pass (type checking + tests)\n- [ ] Production code path verified (via code inspection: no TODOs, real deps wired, tests import production code)\n- [ ] Files staged individually by name (no `git add .` \u002F `git add -A`)\n- [ ] No destructive git operations (`reset --hard`, `checkout HEAD -- \u003Cpath>`, `stash pop\u002Fapply`, `clean -fd`, `branch -D`) used on the shared worktree\n\n## Follow-up slices\n\nIf your Pasture task is a follow-up slice, the implementation procedure is identical. Additionally:\n- Check for a \"DEFER'd-Item Leaf Tasks\" section in `\"${EPOCH_REC}\" show \"${TASK_ID_URI}\"` — these are user-DEFER'd UAT items you must resolve\n- Your implementation must address each DEFER'd-item leaf task's acceptance criteria\n- On completion, report which DEFER'd-item leaf tasks were resolved\n\n## Review-Fix Cycle (within the chosen review-effort budget)\n\nYour slice is not finished when the first pass lands. Code review runs in two phases. **During a wave**, only an open BLOCKER finding gates progress; IMPORTANT and MINOR findings stay open. **After the last wave**, convergence queries every open `pasture:finding` across all waves and targets **0\u002F0\u002F0** within **maxRounds**. Stay available to fix findings of every severity — IMPORTANT and MINOR reach the convergence round too, not just BLOCKER. Findings close only per `C-finding-lifecycle`; a worker cannot close one. Iterate up to the **review-effort budget chosen at Phase 8**. If the budget is exhausted before convergence, the outstanding findings are surfaced to the user at a gate (not proceeded-past silently). Do not treat \"tests pass once\" as wave completion.\n\n## Next\n\n- Complete: `\u002Fpasture:worker-complete`\n- Blocked: `\u002Fpasture:worker-blocked`\n\u003C!-- END GENERATED FROM pasture schema -->\n","# Worker: Implement Vertical Slice\n\n\u003C!-- BEGIN GENERATED FROM pasture schema -->\n\u003C!-- GENERATED FROM pasture v0.0.33 artifact v1 -->\n**Command:** `pasture:worker:implement` — Implement assigned vertical slice following TDD layers\n\n**-> [Full workflow in PROCESS.md](..\u002Fprotocol\u002FPROCESS.md#phase-9-worker-slices)** \u003C- Phase 9\n\n**[wimpl-plan-backwards]**\n- Given: vertical slice task\n- When: implementing\n- Then: plan backwards from production code path\n- Should not: start with types without knowing the end\n\n**[wimpl-vertical-ownership]**\n- Given: production code path\n- When: implementing\n- Then: own full vertical (types → tests → impl → wiring)\n- Should not: implement only horizontal layer\n\n**[wimpl-import-production]**\n- Given: tests\n- When: writing\n- Then: import actual production code\n- Should not: create test-only export or dual code paths\n\n**[wimpl-verify-production]**\n- Given: implementation complete\n- When: verifying\n- Then: confirm production code path is wired (via code inspection or safe testing)\n- Should not: rely only on unit tests passing\n\n**[wimpl-inject-deps]**\n- Given: dependencies\n- When: designing\n- Then: inject all deps for testability\n- Should not: hard-code `new`\n\n**[wimpl-validate-input]**\n- Given: external input\n- When: processing\n- Then: validate with schema\u002Fvalidation tooling\n- Should not: trust raw input\n\n**[frag--validation-cases]**\n- Given: any REQUEST (every request, not only fix-intent ones)\n- When: eliciting (URE), acceptance-testing (UAT), or implementing\n- Then: elicit concrete validation cases — a definition of done plus correct and incorrect behaviours (inputs\u002Fbehaviors that must pass or must fail), confirm the case set with the user in UAT, evaluate the implementation against them, and store failing real-data cases as test fixtures\n- Should not: ship without validation cases; treat validation cases as applying to fix-intent requests only; introduce a request-type axis or enum to gate them\n\n## Task Recovery\n\nThe tracker backend is recorded once in .agents.local\u002Fpasture\u002FEPOCH.md; read that file instead of re-probing. If EPOCH.md is absent, stop and ask the orchestrator to run detection.\n\nRecover from live tracker state at session start and after compaction; never trust cached task rows. Read the `rec:` path from the header and use it as the one entry point: `\"${EPOCH_REC}\" \u003Cop>`. The operation set is closed: create, label, block, note, show, query, ready, status, close, whoami, signal.\n\nStore selection: the adapter reads PASTURE_DB_PATH when set, otherwise the header's `db:`; the probe wrote that value from the same precedence (XDG_DATA_HOME\u002Fpasture\u002Fpasture.db, HOME\u002F.local\u002Fshare\u002Fpasture\u002Fpasture.db, then .pasture\u002Fpasture.db). Use the same selected store for every command. If a recovery query fails, report its actual store path, failed operation, impact, and permission\u002Fschema\u002Fconfiguration repair; failure is not an empty work queue.\n\nThe adapter passes `--namespace` only when EPOCH.md records `namespace:`. That pin wins on both backends. Otherwise it omits the flag. Pasture then derives the namespace itself: PASTURE_NAMESPACE, else the git remote, then file:\u002F\u002F of the working directory. The ledger calls derive_namespace for the header and for every write that has no pin. That function is the one list of remote forms; do not restate it. With no origin, both backends use file:\u002F\u002F of the working directory, so invocations from different subdirectories use different namespaces. Queries without a pin follow that backend's derivation; pass `--all-namespaces` to opt out. When neither a pin nor PASTURE_NAMESPACE is set, pasture reads are unscoped and creation falls back to the git remote, then file:\u002F\u002F of the working directory. Inspect the returned full URI before choosing repository work. Separate reads are not an atomic snapshot.\n\nRun `\"${EPOCH_REC}\" ready`, `\"${EPOCH_REC}\" query --blocked`, and `\"${EPOCH_REC}\" query --status in_progress`. For each referenced active task, run `\"${EPOCH_REC}\" show \"$TASK_URI\"`, `\"${EPOCH_REC}\" show \"$TASK_URI\" --notes`, and `\"${EPOCH_REC}\" show \"$TASK_URI\" --history`. All *_URI variables in examples are inputs bound to full task URIs from an assignment, a verified tracker read, or the URI create printed; never use legacy short IDs. Resolve each variable before execution and quote it as one operand.\n\nCreate prints the new task URI directly. Persist it before any label or note: create-plus-label is non-atomic, so on failure retain the URI and retry only the failed label\u002Fnote operation, never create again. Only open, in_progress, and closed are statuses; blockage is represented by live dependencies and notes, not a blocked status.\n\nAn owner is recorded with `\"${EPOCH_REC}\" label \"$TASK_URI\" owner:\u003Crole>`. That is a claim, not an allocation: an unassigned task stays unassigned until the supervisor allocates it, and repeating an identical claim is not allocation. Never invent an owner.\n\nParent stays open and is blocked by child: `\"${EPOCH_REC}\" block \"$PARENT_URI\" --by \"$CHILD_URI\"`. Reference documents belong in description frontmatter under references:, never fabricated blockers. Workers report evidence and handoffs without closing their slices or leaves; the supervisor closes only after independent review and satisfied gates. Use git agent-commit for local commits. Never install, enable, or modify Git hooks, Git hook path configuration, or pre-commit integration without explicit user approval. Tracker writes are durable; Git history lands separately.\n\nIf the header records `backend: error`, stop before the first mutation: the store exists but cannot be used, and falling back could lose earlier epochs. A mid-epoch write failure retries 3 times. After the third failure, write the attempted record to .agents.local\u002Fpasture\u002Fpending\u002F\u003Ctimestamp>-\u003Cop>.md, keep the recorded backend, and surface the pending record to the user at the next gate. Never switch backends and never drop the record.\n\n## Task Attribution\n\nSelect the current registered author with \"${EPOCH_REC}\" whoami. It prints the author recorded in the header or PASTURE_AUTHOR, and on the pasture backend it confirms that actor with agents show. It does not list agents and it does not invent one. If neither source names an author, it stops: set author: in EPOCH.md or export PASTURE_AUTHOR. Never auto-register or guess an identity during recovery. Every note supplies --author explicitly; machine examples use the pre-registered pasture-system\u002F00000000-0000-0000-0000-000000000000 actor. If it is absent, stop and request registration from the operator rather than claiming registration is fixed. Preserve human intent verbatim and quote historical attribution as evidence, not as a forged new author.\n\n## When to Use\n\nYou have a Pasture task ID for a vertical slice and are ready to implement end-to-end.\n\n## Steps\n\n\n\n### Step 0: Plan backwards from production code path (before implementing)\n\n**Given** Pasture task **when** starting **then** identify production code path first\n\n```bash\n\"${EPOCH_REC}\" show \"${TASK_ID_URI}\" --notes\n# Look for: \"productionCodePath\": \"cli-command subcommand\" or \"api-endpoint\"\n```\n\n**Trace backwards through call stack:**\n```\nEnd: User runs production command\n  ↓ Entry: CLI command.action(...) or API endpoint handler\n  ↓ Service: createXService({ deps }).method(...)\n  ↓ Types: InputType → OutputType\n```\n\n**Identify what you own in each layer:**\n- **L1 Types:** Which types does YOUR slice need? (not other slices)\n- **L2 Tests:** Import actual production code (CLI\u002FAPI), not test-only export\n- **L3 Implementation:** Service method + wiring with real dependencies (not TODO)\n\n### Step 1: Read Pasture task for full context\n\n```bash\n\"${EPOCH_REC}\" show \"${TASK_ID_URI}\" --notes\n```\n\n### Step 2: Update status\n\n```bash\n\"${EPOCH_REC}\" status \"${TASK_ID_URI}\" --set in_progress\n```\n\n### Step 3: Implement your vertical slice in layers\n\n**Layer 1: Types (your slice only)**\n- Create only types YOUR slice needs\n- Don't add types for other slices\n\n**Layer 2: Tests FIRST (import production code)**\n- Write the tests **before** the implementation. The tests ARE the executable\n  verification of the validation-case contract agreed with the user during URE\n  and Plan UAT (the universal validation cases — see [frag--validation-cases]\n  and `C-validation-cases`): definition of done plus correct\u002Fincorrect behaviours.\n- Import actual CLI\u002FAPI package: `import \"myproject\u002Fcmd\u002Ffeature\"`\n- NOT test-only handler: ~~`import \"myproject\u002Finternal\u002Ftesthelpers\u002Ffeature\"`~~\n- Tests will FAIL initially — **red-first** is expected (no impl yet). As you\n  implement Layer 3, progressively fewer tests fail until all are green.\n\n**Layer 3: Implementation + Wiring**\n- Service method for your slice\n- CLI\u002FAPI wiring with real dependencies: `NewService(ServiceDeps{ FS: fs, Logger: logger })`\n- NOT TODO placeholders: ~~`\u002F\u002F TODO: Wire service`~~\n\nFollow:\n- validation_checklist items\n- acceptance_criteria (BDD Given\u002FWhen\u002FThen)\n- tradeoffs from ratified plan\n\n### Step 3b: Evaluate against validation cases (R6, every request)\n\nFor **every** request (not only fix-intent ones), the URE\u002FUAT captured concrete validation cases — the definition of done plus the correct\u002Fincorrect behaviours that must pass or must fail. Per [frag--validation-cases] and `C-validation-cases`:\n- These validation cases are the contract you wrote your Layer-2 tests against (tests-first); evaluate the implementation against each confirmed case.\n- Store the failing real-data cases as **test fixtures** so the behaviour is locked in.\n- The slice is not done until its validation cases pass (red → green).\n\nThere is **no** request-type axis or enum gating this — what a request needs is recognized from the REQUEST\u002FURD, not classified.\n\n### Step 4: Verify quality gates\n\n- Type checking passes\n- Tests pass\n\n### Step 5: Commit safely in a shared worktree\n\nStage **only** the files belonging to your slice, by name:\n```bash\ngit add cmd\u002Ffeature\u002Flist.go pkg\u002Ffeature\u002Fservice.go pkg\u002Ffeature\u002Ftypes.go\ngit agent-commit -m \"feat(feature): add list subcommand\"\n```\n\n**Never** use `git add .`, `git add -A`, or `git commit -am ...` —\nthey sweep peer-worker WIP into your commit.\n\n**Never** use destructive git operations (`git reset --hard`,\n`git checkout HEAD -- \u003Cpath>`, `git stash pop`, `git stash apply`,\n`git clean -fd`, `git branch -D`) on the shared worktree. A\nPreToolUse hook blocks these for worker agents; if you find peer\nwork in your way, post `\"${EPOCH_REC}\" note` and wait for supervisor\ncoordination instead. See **Shared-Worktree Git Discipline** in\n`\u002Fpasture:worker` for the full rationale and the escape hatch.\n\n## Checklist\n\n- [ ] Planned backwards from production code path\n- [ ] Read Pasture task for validation_checklist\n- [ ] Each validation_checklist item satisfied\n- [ ] BDD acceptance_criteria met\n- [ ] Tests import actual production code (not test-only export)\n- [ ] No dual-export anti-pattern (one code path for tests and production)\n- [ ] No TODO placeholders in production code\n- [ ] Service wired with real dependencies (not mocks in production)\n- [ ] Quality gates pass (type checking + tests)\n- [ ] Production code path verified (via code inspection: no TODOs, real deps wired, tests import production code)\n- [ ] Files staged individually by name (no `git add .` \u002F `git add -A`)\n- [ ] No destructive git operations (`reset --hard`, `checkout HEAD -- \u003Cpath>`, `stash pop\u002Fapply`, `clean -fd`, `branch -D`) used on the shared worktree\n\n## Follow-up slices\n\nIf your Pasture task is a follow-up slice, the implementation procedure is identical. Additionally:\n- Check for a \"DEFER'd-Item Leaf Tasks\" section in `\"${EPOCH_REC}\" show \"${TASK_ID_URI}\"` — these are user-DEFER'd UAT items you must resolve\n- Your implementation must address each DEFER'd-item leaf task's acceptance criteria\n- On completion, report which DEFER'd-item leaf tasks were resolved\n\n## Review-Fix Cycle (within the chosen review-effort budget)\n\nYour slice is not finished when the first pass lands. Code review runs in two phases. **During a wave**, only an open BLOCKER finding gates progress; IMPORTANT and MINOR findings stay open. **After the last wave**, convergence queries every open `pasture:finding` across all waves and targets **0\u002F0\u002F0** within **maxRounds**. Stay available to fix findings of every severity — IMPORTANT and MINOR reach the convergence round too, not just BLOCKER. Findings close only per `C-finding-lifecycle`; a worker cannot close one. Iterate up to the **review-effort budget chosen at Phase 8**. If the budget is exhausted before convergence, the outstanding findings are surfaced to the user at a gate (not proceeded-past silently). Do not treat \"tests pass once\" as wave completion.\n\n## Next\n\n- Complete: `\u002Fpasture:worker-complete`\n- Blocked: `\u002Fpasture:worker-blocked`\n\u003C!-- END GENERATED FROM pasture schema -->\n",{"name":5,"description":7},"main","5813de22110ddc609b465a982b4811646ff72d18","skills\u002Fworker-implement",0,"https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture","https:\u002F\u002Fgithub.com\u002Fdayvidpham","dhpham.com","2026-11-11 16:48:48",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add dayvidpham\u002Fpasture --skill worker-implement",{"tool":45,"command":46},"bunx","bunx skills add dayvidpham\u002Fpasture --skill worker-implement",{"tool":48,"command":49},"pnpm","pnpm dlx skills add dayvidpham\u002Fpasture --skill worker-implement","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker-implement\u002FSKILL.md",true,[],[54,62,74,86,97,118],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":26},"01M6DAP7307B3JVZX5DSNAE08Y","fixture","Isolated fixture skill","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Ftestdata\u002Finstall\u002Fglobal\u002Fclaude-code\u002Fnative-marketplace\u002Ffixture-plugin\u002Fskills\u002Ffixture\u002FSKILL.md",[],[56,61],"fixture skill",{"skillNo":63,"name":20,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":26},"01M6DAP48A4K365N83NBG0GFVC","Vertical slice implementer (full production code path)","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker\u002FSKILL.md",[],[20,25,68,69,70,19,71,72,73,23],"path","implementer","code","Production","full","complete",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":26},"01M6DANYHC7P63RFEN26F70MC2","worker-complete","Signal slice completion after quality gates pass","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker-complete\u002FSKILL.md",[],[73,20,81,25,82,83,84,85],"worker complete","signal","gates","quality","quality gates",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":26},"01M6DANWZ31TRP4NN4T1BFYKSR","worker-blocked","Report a blocker to supervisor via Pasture","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker-blocked\u002FSKILL.md",[],[93,20,94,95,96],"worker blocked","via","report","supervisor",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":108,"publishedAt":26},"01M6DANSVDBXBFH93B6EX3H2QK","user-uat","User Acceptance Testing with demonstrative examples","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fuser-uat\u002FSKILL.md",[103],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[109,110,111,112,113,114,115,116,117],"uat","user uat","user","acceptance testing","with","user acceptance testing","examples","acceptance","testing",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":26},"01M6DANQ6QXQ0K2Z3532JV5JQR","user-request","Capture user feature request verbatim (Phase 1)","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fuser-request\u002FSKILL.md",[],[111,125,126,127,128,129,130],"user request","request","phase","feature request","capture","feature"]