[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6WMY31W7C6R65GYPAR6HBM1":3,"skill-same:01M6WMY31W7C6R65GYPAR6HBM1":60},{"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":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":44,"ownerDescription":6,"updatedAt":45,"install":46,"resources":59},"01M6WMY31W7C6R65GYPAR6HBM1","pasture-performance",null,"Use when a pasture read, replay, hook or query is slow, or before claiming a speedup. Covers the session replay path, query plans, benchmarks, invariants, and the evidence a speedup needs.","dayvidpham\u002Faura-plugins","dayvidpham","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22456875?v=4","01M6CHR0F6J2M4QEHFR85XRNSR","David Huu Pham","01M6CHR0KQJ4DK5KSZ9TRTP7DW",2,"MIT","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpasture-performance\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"performance","pasture performance","read","session","use","evidence","replay","benchmarks","query","plans","hook","invariants","path","when","2026-11-10 10:12:30",false,"---\nname: pasture-performance\ndescription: Use when a pasture read, replay, hook or query is slow, or before claiming a speedup. Covers the session replay path, query plans, benchmarks, invariants, and the evidence a speedup needs.\n---\n\n# Pasture performance\n\n**Source of truth:** `pasture\u002Fdocs\u002Fbenchmarks\u002Fsession-replay.md` (workload,\nmeasured costs, invariants, how to measure). Read it first. This skill is the\nprocedure; the runbook is the record.\n\n## Read before you measure\n\n1. `pasture\u002Fdocs\u002Fbenchmarks\u002Fsession-replay.md`\n2. `pasture\u002Fdocs\u002Fdbos-architecture.md` (durable runtime, queues, system DB)\n3. `pasture\u002FAGENTS.md` (dependency pins, timeout table, quality gates)\n\n## Hot path\n\n```mermaid\nflowchart LR\n  R[session read] --> S[pin one snapshot]\n  S --> P[page query: one branch per kind]\n  P --> G[kind guard: indexed column first]\n  G --> D[decode + digest check]\n  D --> T[transition replay]\n  T --> F[page ref set: one admission per key]\n  F --> W[publish: fence on watermark + cache version]\n  W --> C{journal advanced?}\n  C -- yes, budget left --> S\n  C -- no --> E[coherent cache]\n```\n\n## Rules\n\n1. **Measure first.** Restore a copy of the store and open it read-only. Never\n   benchmark the live store while the daemon serves it.\n2. **Count work, not only time.** Wall-clock is noisy on CI. Count queries,\n   definition resolutions, rows scanned, or pages. The committed proof for the\n   definition set is a count: two rows sharing a ref set must make four\n   `LookupCommitted` calls, not eight.\n3. **A speedup needs a call-site test.** The test must fail when the\n   optimization is removed and when the boundary it guards is disabled. Helper\n   unit tests alone do not pin the production path.\n4. **Keep the invariants.** One pinned snapshot per scan; fence on publications\n   (`completed_through_jid`, `cache_version`), never on ordinary writes; a\n   publication clears `dirty`; a definition key is complete by construction and\n   page-scoped.\n5. **Measure the whole path.** A query fix can expose the next cost (definition\n   resolution, per-row decode). Re-measure after each change.\n6. **Run the gates.** `make test`; `make test-performance` for the write lane.\n   Read-path changes get an independent A\u002FB\u002FC review wave.\n7. **Prefer an exit-status command over a log grep.** `pasture rebuild session`\n   rebuilds and exits; use its exit code.\n\n## Commands\n\n```sh\npasture rebuild session            # catch up, unbounded, exits when published\npasture rebuild session --full     # discard and replay the whole journal\npasture serve --backfill           # rebuild, then serve\nmake test-performance              # lane acceptance row + load harness\n```\n\nQuery plan check: `EXPLAIN QUERY PLAN` for the page statement must show one\nindex seek per kind, no `MATERIALIZE` of `journal_attributed`, and no temp\nB-tree over the remaining range.\n\n## Anti-patterns\n\n- A multi-kind `IN` with `ORDER BY journal_id`: it cannot stream, so it sorts the\n  remaining range on every page.\n- Joining `journal_attributed`: SQLite materializes the whole-journal view per\n  page.\n- A guard that leads with `journal_id` and filters `evidence_kind` after.\n- Fencing a replay on `revision` or `dirty`: ordinary writes bump both.\n- Resolving the same definition refs on every row.\n- Grepping a server log for readiness instead of waiting on an exit status.\n- Reporting a speedup from a deleted temporary harness. Commit the count-based\n  test; keep the wall-clock numbers in the runbook.\n","# Pasture performance\n\n**Source of truth:** `pasture\u002Fdocs\u002Fbenchmarks\u002Fsession-replay.md` (workload,\nmeasured costs, invariants, how to measure). Read it first. This skill is the\nprocedure; the runbook is the record.\n\n## Read before you measure\n\n1. `pasture\u002Fdocs\u002Fbenchmarks\u002Fsession-replay.md`\n2. `pasture\u002Fdocs\u002Fdbos-architecture.md` (durable runtime, queues, system DB)\n3. `pasture\u002FAGENTS.md` (dependency pins, timeout table, quality gates)\n\n## Hot path\n\n```mermaid\nflowchart LR\n  R[session read] --> S[pin one snapshot]\n  S --> P[page query: one branch per kind]\n  P --> G[kind guard: indexed column first]\n  G --> D[decode + digest check]\n  D --> T[transition replay]\n  T --> F[page ref set: one admission per key]\n  F --> W[publish: fence on watermark + cache version]\n  W --> C{journal advanced?}\n  C -- yes, budget left --> S\n  C -- no --> E[coherent cache]\n```\n\n## Rules\n\n1. **Measure first.** Restore a copy of the store and open it read-only. Never\n   benchmark the live store while the daemon serves it.\n2. **Count work, not only time.** Wall-clock is noisy on CI. Count queries,\n   definition resolutions, rows scanned, or pages. The committed proof for the\n   definition set is a count: two rows sharing a ref set must make four\n   `LookupCommitted` calls, not eight.\n3. **A speedup needs a call-site test.** The test must fail when the\n   optimization is removed and when the boundary it guards is disabled. Helper\n   unit tests alone do not pin the production path.\n4. **Keep the invariants.** One pinned snapshot per scan; fence on publications\n   (`completed_through_jid`, `cache_version`), never on ordinary writes; a\n   publication clears `dirty`; a definition key is complete by construction and\n   page-scoped.\n5. **Measure the whole path.** A query fix can expose the next cost (definition\n   resolution, per-row decode). Re-measure after each change.\n6. **Run the gates.** `make test`; `make test-performance` for the write lane.\n   Read-path changes get an independent A\u002FB\u002FC review wave.\n7. **Prefer an exit-status command over a log grep.** `pasture rebuild session`\n   rebuilds and exits; use its exit code.\n\n## Commands\n\n```sh\npasture rebuild session            # catch up, unbounded, exits when published\npasture rebuild session --full     # discard and replay the whole journal\npasture serve --backfill           # rebuild, then serve\nmake test-performance              # lane acceptance row + load harness\n```\n\nQuery plan check: `EXPLAIN QUERY PLAN` for the page statement must show one\nindex seek per kind, no `MATERIALIZE` of `journal_attributed`, and no temp\nB-tree over the remaining range.\n\n## Anti-patterns\n\n- A multi-kind `IN` with `ORDER BY journal_id`: it cannot stream, so it sorts the\n  remaining range on every page.\n- Joining `journal_attributed`: SQLite materializes the whole-journal view per\n  page.\n- A guard that leads with `journal_id` and filters `evidence_kind` after.\n- Fencing a replay on `revision` or `dirty`: ordinary writes bump both.\n- Resolving the same definition refs on every row.\n- Grepping a server log for readiness instead of waiting on an exit status.\n- Reporting a speedup from a deleted temporary harness. Commit the count-based\n  test; keep the wall-clock numbers in the runbook.\n",{"name":5,"description":7},"main","337c7a3ec2a5f53ae4a03d7e516f0a6f5fa64ab1",".claude\u002Fskills\u002Fpasture-performance",0,"https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins","https:\u002F\u002Fgithub.com\u002Fdayvidpham","dhpham.com","2026-11-11 16:48:56",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add dayvidpham\u002Faura-plugins --skill pasture-performance",{"tool":52,"command":53},"bunx","bunx skills add dayvidpham\u002Faura-plugins --skill pasture-performance",{"tool":55,"command":56},"pnpm","pnpm dlx skills add dayvidpham\u002Faura-plugins --skill pasture-performance","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpasture-performance\u002FSKILL.md",true,[],[61,87,115,120,126,131],{"skillNo":62,"name":63,"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":33},"01M70PPVS3CW9RYWGZ4KSNV7MV","afk-implement","Run an unattended (\"AFK\") implementation session as the supervisor — scope small progressive iterations, push feature branches, open pull requests, drive review waves to clean, and never merge. Use when the user says they are going AFK or to bed, asks for overnight autonomous implementation, says \"don't block on me\", \"open PRs but don't merge\", \"progressive adoption\", or \"stack changes\".","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fafk-implement\u002FSKILL.md",[],[68,69,70,71,72,73,74,75,76,77,32,78,79,80,81,82,83,84,85,86],"implement","afk implement","pull","bed","never","scope","clean","branches","open","autonomous","review","pull requests","stack","me","run","merge","unattended","overnight","but",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":98,"publishedAt":33},"01M6CHSCKDTSV05385SJ05XWW6","protocol","Aura protocol reference documentation — 12-phase workflow, agent roles, constraints, and coding standards. Read when you need to understand the full workflow or look up conventions.","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002Fskills\u002Fprotocol\u002FSKILL.md",[93],{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[89,99,100,101,21,102,103,104,105,106,107,108,32,109,110,111,112,113,114],"coding","standards","documentation","up","coding standards","reference","look","workflow","full","constraints","you","phase","roles","understand","conventions","aura",{"skillNo":116,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":33},"01M6CHSBJDVKGWAJWQCNQ22F9F","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002Fnix\u002Fhm-module-test-data\u002Ffull\u002Fskills\u002Fprotocol\u002FSKILL.md",[],[89],{"skillNo":121,"name":122,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":33},"01M6CHSAJY85M0W8NEAN4PRF82","example","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002Fnix\u002Fhm-module-test-data\u002Ffull\u002Fskills\u002Fexample\u002FSKILL.md",[],[122],{"skillNo":127,"name":122,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":33},"01M6CHS9KQJYCWR1C9F2GJDZYX","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002Fnix\u002Fhm-module-test-data\u002Ffull\u002F.opencode\u002Fskill\u002Fexample\u002FSKILL.md",[],[122],{"skillNo":132,"name":122,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":33},"01M6CHS8MSW2SDQ5Y05A3GZES4","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Faura-plugins\u002Fblob\u002Fmain\u002Fnix\u002Fhm-module-test-data\u002Ffull\u002F.agents\u002Fskills\u002Fexample\u002FSKILL.md",[],[122]]