{"id":"c422a0f7-9d44-4abc-9697-21c131549c5c","entityType":"agent","slug":"clawhub-athola-nm-sanctum-pr-prep","name":"pr-prep","canonicalUrl":"https://www.xpersona.co/agent/clawhub-athola-nm-sanctum-pr-prep","canonicalPath":"/agent/clawhub-athola-nm-sanctum-pr-prep","generatedAt":"2026-10-10T10:48:43.650Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T08:20:51.185Z","emptyReason":null},"description":"Prepares pull requests by running quality gates, drafting descriptions, and validating tests Skill: pr-prep Owner: athola Summary: Prepares pull requests by running quality gates, drafting descriptions, and validating tests Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:20:31.922Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:40:35.559Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:57:29.055Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:05:20.969Z | user Release v1.9.14 v1.9.13 | 2026-06-27","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-sanctum-pr-prep","sourceUrl":"https://clawhub.ai/athola/nm-sanctum-pr-prep","homepage":"https://clawhub.ai/athola/skills/nm-sanctum-pr-prep","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/athola/nm-sanctum-pr-prep","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/athola/skills/nm-sanctum-pr-prep","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Prepares pull requests by running quality gates, drafting descriptions, and validating tests Skill: pr-prep Owner: athola Summary: Prepares pull requests by run"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:20:51.185Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:20:51.185Z","emptyReason":null},"stars":null,"forks":null,"downloads":1562,"packageName":null,"latestVersion":"1.9.19","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:20:51.184Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T08:20:51.185Z","lastCrawledAt":"2026-10-10T08:20:51.184Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T08:20:51.184Z","lastVerifiedAt":null,"highlights":[{"version":"1.9.19","createdAt":"2026-08-26T13:20:31.922Z","changelog":"Release v1.9.19","fileCount":6,"zipByteSize":10318},{"version":"1.9.17","createdAt":"2026-07-30T05:40:35.559Z","changelog":"Release v1.9.17","fileCount":6,"zipByteSize":10265},{"version":"1.9.16","createdAt":"2026-07-14T19:57:29.055Z","changelog":"Release v1.9.16","fileCount":6,"zipByteSize":10269},{"version":"1.9.14","createdAt":"2026-06-30T18:05:20.969Z","changelog":"Release v1.9.14","fileCount":6,"zipByteSize":10472},{"version":"1.9.13","createdAt":"2026-06-27T16:23:13.333Z","changelog":"Release v1.9.13","fileCount":6,"zipByteSize":10306},{"version":"1.9.12","createdAt":"2026-06-19T03:18:38.375Z","changelog":"Release v1.9.12","fileCount":6,"zipByteSize":10286},{"version":"1.0.3","createdAt":"2026-06-18T15:20:23.569Z","changelog":"Release v1.9.12","fileCount":6,"zipByteSize":10326},{"version":"1.0.2","createdAt":"2026-05-09T02:19:54.608Z","changelog":"Release v1.9.5","fileCount":6,"zipByteSize":10078}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-sanctum-pr-prep","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:48:43.647Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-pr-prep/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T08:20:51.185Z","emptyReason":null},"readme":"Skill: pr-prep\n\nOwner: athola\n\nSummary: Prepares pull requests by running quality gates, drafting descriptions, and validating tests\n\nTags: latest:1.9.19\n\nVersion history:\n\nv1.9.19 | 2026-08-26T13:20:31.922Z | user\n\nRelease v1.9.19\n\nv1.9.17 | 2026-07-30T05:40:35.559Z | user\n\nRelease v1.9.17\n\nv1.9.16 | 2026-07-14T19:57:29.055Z | user\n\nRelease v1.9.16\n\nv1.9.14 | 2026-06-30T18:05:20.969Z | user\n\nRelease v1.9.14\n\nv1.9.13 | 2026-06-27T16:23:13.333Z | user\n\nRelease v1.9.13\n\nv1.9.12 | 2026-06-19T03:18:38.375Z | user\n\nRelease v1.9.12\n\nv1.0.3 | 2026-06-18T15:20:23.569Z | user\n\nRelease v1.9.12\n\nv1.0.2 | 2026-05-09T02:19:54.608Z | user\n\nRelease v1.9.5\n\nv1.0.1 | 2026-05-06T14:21:18.032Z | user\n\nRelease v1.9.4\n\nv1.0.0 | 2026-04-15T19:01:54.055Z | auto\n\nInitial public release of pr-prep skill for Night Market Sanctum.\n\n- Provides an end-to-end workflow for preparing high-quality pull requests.\n- Runs quality gates, validates tests, and synchronizes capability documentation before submission.\n- Guides users through self-review, change summarization, and standards-compliant PR drafting.\n- Enforces language quality and evidence-based PR descriptions; eliminates slop and AI references.\n- Includes troubleshooting and remediation steps.\n\nArchive index:\n\nArchive v1.9.19: 6 files, 10318 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (2072b), SKILL.md (6490b), _meta.json (138b)\n\nFile v1.9.19:SKILL.md\n\n---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true\n```\n\n**Additive bias audit:**\n\nRun `Skill(imbue:justify)` to compute the additive bias\nscore and check Iron Law compliance. If the score is\nYELLOW or above, justify each flagged signal before\nproceeding. If RED or STOP, rethink the approach.\n\n**Manual verification:**\n\n- [ ] Read the full diff -- does every change serve the\n      stated goal?\n- [ ] No debug statements or `TODO` markers left in\n- [ ] No commented-out code blocks\n- [ ] No formatting changes mixed with logic changes\n- [ ] No fixup commits that should be squashed\n- [ ] Additive bias score is GREEN or justified YELLOW\n- [ ] Iron Law compliance: PASS (no test tampering)\n\nIf issues are found, fix them before proceeding.\n\n## Step 3: Summarize Changes (`changes-summarized`)\n\nUse the notes from the workspace review and the output of `git diff --stat origin/main...HEAD` to understand the scope. Identify key points in the diffs and group them into 2-4 paragraphs highlighting the technical changes and their rationale. Note breaking changes, migrations, or documentation updates.\n\n## Step 4: Document Testing (`testing-documented`)\n\nList each test command executed and its result. Include manual verification steps where relevant. If tests were skipped, document the reason and the mitigation plan.\n\n## Step 5: Draft the PR (`pr-drafted`)\n\nPopulate the standard template with Summary, Changes, Testing, and Checklist sections. Include issue references, screenshots, or follow-up TODO items. Template structure and examples are available in `modules/pr-template.md`.\n\n## Step 6: Verify Content Quality (`content-verified`)\n\nApply `Skill(scribe:slop-detector)` principles to the draft. Verify that the PR description avoids tier-1 slop words (delve, comprehensive, leverage, utilize, robust, seamless) and formulaic phrases like \"I'd be happy to\" or \"It should be noted.\" Ensure there is no AI attribution in the text and that all claims are grounded with evidence such as commands, numbers, or filenames. Use active voice and maintain a balanced structure with prose for context.\n\n### Vocabulary Substitutions\n\n- Replace **leverage** or **utilize** with **use**.\n- Replace **comprehensive** with **thorough** or **complete**.\n- Replace **robust** with **solid** or **reliable**.\n- Replace **facilitate** with **help** or **enable**.\n- Replace **streamline** with **simplify**.\n\n### Remediation\n\nIf the description contains slop, apply `Skill(scribe:doc-generator)` principles to ground claims with specifics, remove marketing language, and use direct statements.\n\n## Output Instructions\n\nWrite the final PR description to the specified path, then display the file path and its contents for confirmation.\n\n## Notes\n\nDo not include tool or AI attribution in the PR text. If changes are required mid-process, re-run quality gates. This skill covers preparation; pushing changes and opening the PR occurs outside this workflow.\n\n## Supporting Modules\n\n- [TodoWrite patterns](modules/todowrite-patterns.md) - naming conventions for sanctum TodoWrite items\n\n## Troubleshooting\n\nIf project-specific commands like `make` or `npm` are unavailable, verify the environment setup against the `README`. For permission errors, check write access to build directories. If a step fails without clear output, retry the command with verbose flags to inspect the logs.\n\nFile v1.9.19:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750431922\n}\n\nFile v1.9.19:modules/pr-template.md\n\n# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue References\nLink related issues:\n```markdown\nFixes #456\nRelated to #789\nPart of #101\n```\n\n### Migration Guide\nFor breaking changes:\n```markdown\n## Migration Guide\n**Before:**\n\\`\\`\\`python\ngenerate_pdf(resume, \"output.pdf\")\n\\`\\`\\`\n\n**After:**\n\\`\\`\\`python\nresume.to_pdf(\"output.pdf\")\n\\`\\`\\`\n```\n\n### Performance Impact\nFor performance-related changes:\n```markdown\n## Performance Impact\n- PDF generation: 2.3s → 0.8s (65% improvement)\n- Memory usage: 150MB → 45MB\n- Benchmark results: [link to benchmark output]\n```\n\n### Security Considerations\nFor security-related changes:\n```markdown\n## Security Considerations\n- Input validation added for all user-supplied paths\n- Sanitization applied to template variables\n- No secrets or credentials in code or tests\n```\n\n## Best Practices for PR Descriptions\n\n### Do's\n- Be concise but complete\n- Focus on \"why\" not just \"what\"\n- Use bullet points for scannability\n- Include actual commands and results\n- Link to relevant issues\n- Highlight breaking changes prominently\n- Use code blocks for examples\n- Group related changes together\n\n### Don'ts\n- Include AI/tool attribution\n- Copy-paste entire file diffs\n- Use vague descriptions\n- Skip testing documentation\n- Hide breaking changes in middle of list\n- Include work-in-progress notes\n- Reference internal tool commands unless relevant\n\n## Writing Quality (scribe Integration)\n\nApply `scribe:doc-generator` principles to avoid AI-sounding text:\n\n### Vocabulary to Avoid\n\n| Instead of | Use |\n|------------|-----|\n| leverage | use |\n| utilize | use |\n| comprehensive | thorough |\n| robust | solid |\n| facilitate | help |\n| streamline | simplify |\n| seamless | smooth |\n| delve | explore |\n\n### Phrase Patterns to Remove\n\n- \"In order to...\" → \"To...\"\n- \"It should be noted that...\" → (just state it)\n- \"I'd be happy to...\" → (not relevant in PR text)\n- \"This ensures that...\" → (ground with specifics instead)\n- Marketing language: \"enterprise-ready\", \"cutting-edge\", \"best-in-class\"\n\n### Quality Checklist\n\nBefore finalizing a PR description:\n\n- [ ] No tier-1 slop words present\n- [ ] All claims grounded with specifics (numbers, files, commands)\n- [ ] Active voice used throughout\n- [ ] No formulaic openers or closers\n- [ ] Balanced structure (not all bullets)\n\n## Template Variations\n\n### Small Bug Fix\n```markdown\n## Summary\nFix null pointer exception in PDF generation when resume has no education section.\n\n## Changes\n- Add null check before accessing education fields\n- Add test case for resumes without education\n\n## Testing\n- `pytest tests/test_pdf_generation.py` - all passing\n- Verified fix with sample resume lacking education section\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\n### Feature Addition\n```markdown\n## Summary\nAdd support for exporting resumes to HTML format alongside existing PDF export.\n\n## Changes\n- **Core API**: Add `to_html()` method to Resume class\n- **Templates**: Create Jinja2 HTML templates matching PDF layouts\n- **Testing**: Add HTML generation tests and snapshot testing\n- **Documentation**: Update README with HTML export examples\n\n## Testing\n- `make test` - 52 tests passing (added 5 new tests)\n- `make lint` - no warnings\n- Manual verification: Generated HTML from 4 resume templates, verified in Chrome/Firefox\n- Snapshot tests validate HTML output consistency\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\nFile v1.9.19:modules/quality-gates.md\n\n# Quality Gates Pattern Reference\n\n## Common Quality Gate Commands by Language\n\n### Python Projects\n```bash\n# Formatting\nmake format          # or: black . && isort .\nruff format .\nuv run ruff format .\n\n# Linting\nmake lint            # or: ruff check .\nmypy .\npylint src/\n\n# Testing\nmake test            # or: pytest\npytest --cov=src --cov-report=term\nuv run pytest\n```\n\n### JavaScript/TypeScript Projects\n```bash\n# Formatting\nnpm run format       # or: prettier --write .\nyarn format\n\n# Linting\nnpm run lint         # or: eslint .\nyarn lint\n\n# Testing\nnpm test\nyarn test\njest --coverage\n```\n\n### Go Projects\n```bash\n# Formatting\ngo fmt ./...\ngofmt -w .\n\n# Linting\ngolangci-lint run\ngo vet ./...\n\n# Testing\ngo test ./...\ngo test -v -cover ./...\n```\n\n### Rust Projects\n```bash\n# Formatting\ncargo fmt\n\n# Linting\ncargo clippy -- -D warnings\n\n# Testing\ncargo test\ncargo test --all-features\n```\n\n## Failure Handling Patterns\n\n### When Quality Gates Fail\n1. **Capture the exact error output** - Don't summarize, show actual failures\n2. **Fix failures immediately** - Never proceed with failing tests\n3. **Re-run after fixes** - Confirm all gates pass before continuing\n4. **Document what was fixed** - Include in PR testing section\n\n### Common Failure Categories\n- **Formatting issues**: Auto-fix with formatter, then re-run\n- **Linting warnings**: Address or document why they're acceptable\n- **Test failures**: Fix the code or update tests as needed\n- **Type errors**: Resolve type mismatches or add proper annotations\n\n## Alternative Validation Approaches\n\n### When Local Tests Can't Run\n- **Missing dependencies**: Document what's missing and CI strategy\n- **Environment constraints**: Note platform-specific limitations\n- **Integration tests**: Explain which will run in CI only\n- **Manual verification**: Document steps taken locally instead\n\n### CI/CD Integration Notes\n```markdown\n## Testing\n- Local: `make test` - all unit tests passing\n- CI will run: integration tests, E2E tests, cross-platform builds\n- Manual verification: Tested CLI commands locally on Ubuntu 22.04\n```\n\n## Quality Gate Checklist\n- [ ] Formatting passes (no diffs after format command)\n- [ ] Linting passes (no warnings or errors)\n- [ ] All tests pass locally\n- [ ] Type checking passes (if applicable)\n- [ ] Build succeeds (if applicable)\n- [ ] Manual smoke testing completed\n\n## Special Cases\n\n### Pre-commit Hooks\nIf project has pre-commit hooks:\n```bash\npre-commit run --all-files\n```\nDocument any hooks that were run.\n\n### Multiple Test Suites\n```bash\n# Unit tests\npytest tests/unit/\n\n# Integration tests\npytest tests/integration/\n\n# E2E tests (may run in CI only)\n# Skipped locally - runs in CI environment\n```\n\n### Performance Tests\nNote if performance benchmarks exist but weren't run:\n```markdown\n## Testing\n- Unit tests: passing\n- Performance benchmarks: skipped (run in dedicated CI job)\n```\n\nFile v1.9.19:modules/todowrite-patterns.md\n\n---\nparent_skill: sanctum:shared\nname: todowrite-patterns\ndescription: TodoWrite naming conventions and patterns for sanctum skills\ncategory: patterns\ntags: [todowrite, naming, conventions]\nestimated_tokens: 150\n---\n\n# TodoWrite Patterns for Sanctum\n\n## Naming Convention\nAll sanctum skills follow a consistent pattern for TodoWrite items:\n```\n<skill-name>:<step-name>\n```\n\nThe skill name matches the frontmatter `name` field, and the step name describes the specific workflow phase.\n\n## Examples from Sanctum Skills\n\n### git-workspace-review\n```\ngit-review:repo-confirmed\ngit-review:status-overview\ngit-review:diff-stat\ngit-review:diff-details\n```\n\n### commit-messages\nCommit messages skill does not use TodoWrite as it's a single-step artifact generation workflow.\n\n### pr-prep\n```\npr-prep:workspace-reviewed\npr-prep:quality-gates\npr-prep:self-reviewed\npr-prep:changes-summarized\npr-prep:testing-documented\npr-prep:pr-drafted\npr-prep:content-verified\n```\n\n### doc-updates\n```\ndoc-updates:context-collected\ndoc-updates:targets-identified\ndoc-updates:consolidation-checked\ndoc-updates:edits-applied\ndoc-updates:guidelines-verified\ndoc-updates:accuracy-verified\ndoc-updates:preview\n```\n\n### version-updates\n```\nversion-update:context-collected\nversion-update:target-files\nversion-update:version-set\nversion-update:docs-updated\nversion-update:verification\n```\n\n## Task Deletion (Claude Code 2.1.20+)\n\nTaskUpdate now supports deleting tasks. Use deletion to clean up completed workflow items and reduce clutter in the `/tasks` view.\n\n> **2.1.21 fix**: Task IDs are no longer reused after deletion. On 2.1.20, deleting a task and creating a new one could silently reuse the same ID, leaking old state into new tasks. Upgrade to 2.1.21+ if using task deletion.\n\n### When to Delete\n- After a workflow completes successfully and all items are marked done\n- Stale items from interrupted or abandoned workflows\n- Temporary tracking items that served their purpose\n\n### When NOT to Delete\n- Items that serve as audit trails (proof-of-work items)\n- Items referenced by other active workflows\n- Items the user may want to review later\n\n### Deletion Pattern\n```\n# After workflow completion, clean up tracking items:\nTaskUpdate(id: \"pr-prep:workspace-reviewed\", delete: true)\nTaskUpdate(id: \"pr-prep:quality-gates\", delete: true)\n```\n\n### Recommended Approach\nCreate → Complete → (optionally) Delete stale items after workflow success. Keep proof-of-work and audit items intact.\n\n## Best Practices\n\n### Step Naming\n- Use present tense verbs (collected, identified, applied, verified)\n- Keep names concise (2-3 words max)\n- Make the outcome clear from the name\n- Order steps sequentially in the workflow\n\n### When to Skip TodoWrite\n- Single-step workflows (like commit-messages)\n- Quick utilities that complete in one operation\n- Read-only analysis with no discrete phases\n\n### Integration\n- Create all TodoWrite items at workflow start\n- Mark items complete immediately after finishing each step\n- Use TodoWrite as workflow documentation for users\n\nFile v1.9.19:skill-card.md\n\n## Description:\n\nPrepares pull requests by running quality gates, drafting descriptions, and validating tests.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to prepare pull requests by reviewing repository changes, running project quality gates, documenting testing, and drafting PR text.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Formatter or fix steps may change local files during normal PR preparation.\n\nMitigation: Review the selected output path and inspect repository diffs after running quality gates or fix commands.\n\nRisk: Drafted PR text can misstate testing or scope if the repository review is stale.\n\nMitigation: Refresh the workspace review after staged changes and verify command results, filenames, and claims before using the description.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-pr-prep)\n- [Publisher profile](https://clawhub.ai/user/athola)\n- [Clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum)\n- [Pull request template module](modules/pr-template.md)\n- [Quality gates module](modules/quality-gates.md)\n- [TodoWrite patterns module](modules/todowrite-patterns.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, guidance]\n\n**Output Format:** [Markdown PR description with inline shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Writes the final PR description to a specified path and displays the path and contents for confirmation.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release evidence; artifact frontmatter says 1.9.8)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.9.17: 6 files, 10265 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (1965b), SKILL.md (6490b), _meta.json (138b)\n\nFile v1.9.17:SKILL.md\n\n---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true\n```\n\n**Additive bias audit:**\n\nRun `Skill(imbue:justify)` to compute the additive bias\nscore and check Iron Law compliance. If the score is\nYELLOW or above, justify each flagged signal before\nproceeding. If RED or STOP, rethink the approach.\n\n**Manual verification:**\n\n- [ ] Read the full diff -- does every change serve the\n      stated goal?\n- [ ] No debug statements or `TODO` markers left in\n- [ ] No commented-out code blocks\n- [ ] No formatting changes mixed with logic changes\n- [ ] No fixup commits that should be squashed\n- [ ] Additive bias score is GREEN or justified YELLOW\n- [ ] Iron Law compliance: PASS (no test tampering)\n\nIf issues are found, fix them before proceeding.\n\n## Step 3: Summarize Changes (`changes-summarized`)\n\nUse the notes from the workspace review and the output of `git diff --stat origin/main...HEAD` to understand the scope. Identify key points in the diffs and group them into 2-4 paragraphs highlighting the technical changes and their rationale. Note breaking changes, migrations, or documentation updates.\n\n## Step 4: Document Testing (`testing-documented`)\n\nList each test command executed and its result. Include manual verification steps where relevant. If tests were skipped, document the reason and the mitigation plan.\n\n## Step 5: Draft the PR (`pr-drafted`)\n\nPopulate the standard template with Summary, Changes, Testing, and Checklist sections. Include issue references, screenshots, or follow-up TODO items. Template structure and examples are available in `modules/pr-template.md`.\n\n## Step 6: Verify Content Quality (`content-verified`)\n\nApply `Skill(scribe:slop-detector)` principles to the draft. Verify that the PR description avoids tier-1 slop words (delve, comprehensive, leverage, utilize, robust, seamless) and formulaic phrases like \"I'd be happy to\" or \"It should be noted.\" Ensure there is no AI attribution in the text and that all claims are grounded with evidence such as commands, numbers, or filenames. Use active voice and maintain a balanced structure with prose for context.\n\n### Vocabulary Substitutions\n\n- Replace **leverage** or **utilize** with **use**.\n- Replace **comprehensive** with **thorough** or **complete**.\n- Replace **robust** with **solid** or **reliable**.\n- Replace **facilitate** with **help** or **enable**.\n- Replace **streamline** with **simplify**.\n\n### Remediation\n\nIf the description contains slop, apply `Skill(scribe:doc-generator)` principles to ground claims with specifics, remove marketing language, and use direct statements.\n\n## Output Instructions\n\nWrite the final PR description to the specified path, then display the file path and its contents for confirmation.\n\n## Notes\n\nDo not include tool or AI attribution in the PR text. If changes are required mid-process, re-run quality gates. This skill covers preparation; pushing changes and opening the PR occurs outside this workflow.\n\n## Supporting Modules\n\n- [TodoWrite patterns](modules/todowrite-patterns.md) - naming conventions for sanctum TodoWrite items\n\n## Troubleshooting\n\nIf project-specific commands like `make` or `npm` are unavailable, verify the environment setup against the `README`. For permission errors, check write access to build directories. If a step fails without clear output, retry the command with verbose flags to inspect the logs.\n\nFile v1.9.17:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.9.17\",\n  \"publishedAt\": 1785390035559\n}\n\nFile v1.9.17:modules/pr-template.md\n\n# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue References\nLink related issues:\n```markdown\nFixes #456\nRelated to #789\nPart of #101\n```\n\n### Migration Guide\nFor breaking changes:\n```markdown\n## Migration Guide\n**Before:**\n\\`\\`\\`python\ngenerate_pdf(resume, \"output.pdf\")\n\\`\\`\\`\n\n**After:**\n\\`\\`\\`python\nresume.to_pdf(\"output.pdf\")\n\\`\\`\\`\n```\n\n### Performance Impact\nFor performance-related changes:\n```markdown\n## Performance Impact\n- PDF generation: 2.3s → 0.8s (65% improvement)\n- Memory usage: 150MB → 45MB\n- Benchmark results: [link to benchmark output]\n```\n\n### Security Considerations\nFor security-related changes:\n```markdown\n## Security Considerations\n- Input validation added for all user-supplied paths\n- Sanitization applied to template variables\n- No secrets or credentials in code or tests\n```\n\n## Best Practices for PR Descriptions\n\n### Do's\n- Be concise but complete\n- Focus on \"why\" not just \"what\"\n- Use bullet points for scannability\n- Include actual commands and results\n- Link to relevant issues\n- Highlight breaking changes prominently\n- Use code blocks for examples\n- Group related changes together\n\n### Don'ts\n- Include AI/tool attribution\n- Copy-paste entire file diffs\n- Use vague descriptions\n- Skip testing documentation\n- Hide breaking changes in middle of list\n- Include work-in-progress notes\n- Reference internal tool commands unless relevant\n\n## Writing Quality (scribe Integration)\n\nApply `scribe:doc-generator` principles to avoid AI-sounding text:\n\n### Vocabulary to Avoid\n\n| Instead of | Use |\n|------------|-----|\n| leverage | use |\n| utilize | use |\n| comprehensive | thorough |\n| robust | solid |\n| facilitate | help |\n| streamline | simplify |\n| seamless | smooth |\n| delve | explore |\n\n### Phrase Patterns to Remove\n\n- \"In order to...\" → \"To...\"\n- \"It should be noted that...\" → (just state it)\n- \"I'd be happy to...\" → (not relevant in PR text)\n- \"This ensures that...\" → (ground with specifics instead)\n- Marketing language: \"enterprise-ready\", \"cutting-edge\", \"best-in-class\"\n\n### Quality Checklist\n\nBefore finalizing a PR description:\n\n- [ ] No tier-1 slop words present\n- [ ] All claims grounded with specifics (numbers, files, commands)\n- [ ] Active voice used throughout\n- [ ] No formulaic openers or closers\n- [ ] Balanced structure (not all bullets)\n\n## Template Variations\n\n### Small Bug Fix\n```markdown\n## Summary\nFix null pointer exception in PDF generation when resume has no education section.\n\n## Changes\n- Add null check before accessing education fields\n- Add test case for resumes without education\n\n## Testing\n- `pytest tests/test_pdf_generation.py` - all passing\n- Verified fix with sample resume lacking education section\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\n### Feature Addition\n```markdown\n## Summary\nAdd support for exporting resumes to HTML format alongside existing PDF export.\n\n## Changes\n- **Core API**: Add `to_html()` method to Resume class\n- **Templates**: Create Jinja2 HTML templates matching PDF layouts\n- **Testing**: Add HTML generation tests and snapshot testing\n- **Documentation**: Update README with HTML export examples\n\n## Testing\n- `make test` - 52 tests passing (added 5 new tests)\n- `make lint` - no warnings\n- Manual verification: Generated HTML from 4 resume templates, verified in Chrome/Firefox\n- Snapshot tests validate HTML output consistency\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\nFile v1.9.17:modules/quality-gates.md\n\n# Quality Gates Pattern Reference\n\n## Common Quality Gate Commands by Language\n\n### Python Projects\n```bash\n# Formatting\nmake format          # or: black . && isort .\nruff format .\nuv run ruff format .\n\n# Linting\nmake lint            # or: ruff check .\nmypy .\npylint src/\n\n# Testing\nmake test            # or: pytest\npytest --cov=src --cov-report=term\nuv run pytest\n```\n\n### JavaScript/TypeScript Projects\n```bash\n# Formatting\nnpm run format       # or: prettier --write .\nyarn format\n\n# Linting\nnpm run lint         # or: eslint .\nyarn lint\n\n# Testing\nnpm test\nyarn test\njest --coverage\n```\n\n### Go Projects\n```bash\n# Formatting\ngo fmt ./...\ngofmt -w .\n\n# Linting\ngolangci-lint run\ngo vet ./...\n\n# Testing\ngo test ./...\ngo test -v -cover ./...\n```\n\n### Rust Projects\n```bash\n# Formatting\ncargo fmt\n\n# Linting\ncargo clippy -- -D warnings\n\n# Testing\ncargo test\ncargo test --all-features\n```\n\n## Failure Handling Patterns\n\n### When Quality Gates Fail\n1. **Capture the exact error output** - Don't summarize, show actual failures\n2. **Fix failures immediately** - Never proceed with failing tests\n3. **Re-run after fixes** - Confirm all gates pass before continuing\n4. **Document what was fixed** - Include in PR testing section\n\n### Common Failure Categories\n- **Formatting issues**: Auto-fix with formatter, then re-run\n- **Linting warnings**: Address or document why they're acceptable\n- **Test failures**: Fix the code or update tests as needed\n- **Type errors**: Resolve type mismatches or add proper annotations\n\n## Alternative Validation Approaches\n\n### When Local Tests Can't Run\n- **Missing dependencies**: Document what's missing and CI strategy\n- **Environment constraints**: Note platform-specific limitations\n- **Integration tests**: Explain which will run in CI only\n- **Manual verification**: Document steps taken locally instead\n\n### CI/CD Integration Notes\n```markdown\n## Testing\n- Local: `make test` - all unit tests passing\n- CI will run: integration tests, E2E tests, cross-platform builds\n- Manual verification: Tested CLI commands locally on Ubuntu 22.04\n```\n\n## Quality Gate Checklist\n- [ ] Formatting passes (no diffs after format command)\n- [ ] Linting passes (no warnings or errors)\n- [ ] All tests pass locally\n- [ ] Type checking passes (if applicable)\n- [ ] Build succeeds (if applicable)\n- [ ] Manual smoke testing completed\n\n## Special Cases\n\n### Pre-commit Hooks\nIf project has pre-commit hooks:\n```bash\npre-commit run --all-files\n```\nDocument any hooks that were run.\n\n### Multiple Test Suites\n```bash\n# Unit tests\npytest tests/unit/\n\n# Integration tests\npytest tests/integration/\n\n# E2E tests (may run in CI only)\n# Skipped locally - runs in CI environment\n```\n\n### Performance Tests\nNote if performance benchmarks exist but weren't run:\n```markdown\n## Testing\n- Unit tests: passing\n- Performance benchmarks: skipped (run in dedicated CI job)\n```\n\nFile v1.9.17:modules/todowrite-patterns.md\n\n---\nparent_skill: sanctum:shared\nname: todowrite-patterns\ndescription: TodoWrite naming conventions and patterns for sanctum skills\ncategory: patterns\ntags: [todowrite, naming, conventions]\nestimated_tokens: 150\n---\n\n# TodoWrite Patterns for Sanctum\n\n## Naming Convention\nAll sanctum skills follow a consistent pattern for TodoWrite items:\n```\n<skill-name>:<step-name>\n```\n\nThe skill name matches the frontmatter `name` field, and the step name describes the specific workflow phase.\n\n## Examples from Sanctum Skills\n\n### git-workspace-review\n```\ngit-review:repo-confirmed\ngit-review:status-overview\ngit-review:diff-stat\ngit-review:diff-details\n```\n\n### commit-messages\nCommit messages skill does not use TodoWrite as it's a single-step artifact generation workflow.\n\n### pr-prep\n```\npr-prep:workspace-reviewed\npr-prep:quality-gates\npr-prep:self-reviewed\npr-prep:changes-summarized\npr-prep:testing-documented\npr-prep:pr-drafted\npr-prep:content-verified\n```\n\n### doc-updates\n```\ndoc-updates:context-collected\ndoc-updates:targets-identified\ndoc-updates:consolidation-checked\ndoc-updates:edits-applied\ndoc-updates:guidelines-verified\ndoc-updates:accuracy-verified\ndoc-updates:preview\n```\n\n### version-updates\n```\nversion-update:context-collected\nversion-update:target-files\nversion-update:version-set\nversion-update:docs-updated\nversion-update:verification\n```\n\n## Task Deletion (Claude Code 2.1.20+)\n\nTaskUpdate now supports deleting tasks. Use deletion to clean up completed workflow items and reduce clutter in the `/tasks` view.\n\n> **2.1.21 fix**: Task IDs are no longer reused after deletion. On 2.1.20, deleting a task and creating a new one could silently reuse the same ID, leaking old state into new tasks. Upgrade to 2.1.21+ if using task deletion.\n\n### When to Delete\n- After a workflow completes successfully and all items are marked done\n- Stale items from interrupted or abandoned workflows\n- Temporary tracking items that served their purpose\n\n### When NOT to Delete\n- Items that serve as audit trails (proof-of-work items)\n- Items referenced by other active workflows\n- Items the user may want to review later\n\n### Deletion Pattern\n```\n# After workflow completion, clean up tracking items:\nTaskUpdate(id: \"pr-prep:workspace-reviewed\", delete: true)\nTaskUpdate(id: \"pr-prep:quality-gates\", delete: true)\n```\n\n### Recommended Approach\nCreate → Complete → (optionally) Delete stale items after workflow success. Keep proof-of-work and audit items intact.\n\n## Best Practices\n\n### Step Naming\n- Use present tense verbs (collected, identified, applied, verified)\n- Keep names concise (2-3 words max)\n- Make the outcome clear from the name\n- Order steps sequentially in the workflow\n\n### When to Skip TodoWrite\n- Single-step workflows (like commit-messages)\n- Quick utilities that complete in one operation\n- Read-only analysis with no discrete phases\n\n### Integration\n- Create all TodoWrite items at workflow start\n- Mark items complete immediately after finishing each step\n- Use TodoWrite as workflow documentation for users\n\nFile v1.9.17:skill-card.md\n\n## Description: <br>\nPrepares pull requests by running quality gates, drafting descriptions, and validating tests. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to prepare pull requests by reviewing workspace state, running project quality gates, summarizing changes, documenting tests, and drafting a PR description. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Project-specific formatters, linters, and tests may modify workspace files or fail in ways that require follow-up changes. <br>\nMitigation: Review the planned commands before execution, inspect any resulting diffs, and re-run quality gates after fixes. <br>\nRisk: The PR description output path may create or overwrite a file. <br>\nMitigation: Choose the output path deliberately and review the generated PR description before using it. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/athola/skills/nm-sanctum-pr-prep) <br>\n- [OpenClaw Homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown with inline shell commands and checklist items] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces a PR description at a user-specified path and may report the file path and contents for confirmation.] <br>\n\n## Skill Version(s): <br>\n1.9.17 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.16: 6 files, 10269 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (2011b), SKILL.md (6490b), _meta.json (138b)\n\nFile v1.9.16:SKILL.md\n\n---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true\n```\n\n**Additive bias audit:**\n\nRun `Skill(imbue:justify)` to compute the additive bias\nscore and check Iron Law compliance. If the score is\nYELLOW or above, justify each flagged signal before\nproceeding. If RED or STOP, rethink the approach.\n\n**Manual verification:**\n\n- [ ] Read the full diff -- does every change serve the\n      stated goal?\n- [ ] No debug statements or `TODO` markers left in\n- [ ] No commented-out code blocks\n- [ ] No formatting changes mixed with logic changes\n- [ ] No fixup commits that should be squashed\n- [ ] Additive bias score is GREEN or justified YELLOW\n- [ ] Iron Law compliance: PASS (no test tampering)\n\nIf issues are found, fix them before proceeding.\n\n## Step 3: Summarize Changes (`changes-summarized`)\n\nUse the notes from the workspace review and the output of `git diff --stat origin/main...HEAD` to understand the scope. Identify key points in the diffs and group them into 2-4 paragraphs highlighting the technical changes and their rationale. Note breaking changes, migrations, or documentation updates.\n\n## Step 4: Document Testing (`testing-documented`)\n\nList each test command executed and its result. Include manual verification steps where relevant. If tests were skipped, document the reason and the mitigation plan.\n\n## Step 5: Draft the PR (`pr-drafted`)\n\nPopulate the standard template with Summary, Changes, Testing, and Checklist sections. Include issue references, screenshots, or follow-up TODO items. Template structure and examples are available in `modules/pr-template.md`.\n\n## Step 6: Verify Content Quality (`content-verified`)\n\nApply `Skill(scribe:slop-detector)` principles to the draft. Verify that the PR description avoids tier-1 slop words (delve, comprehensive, leverage, utilize, robust, seamless) and formulaic phrases like \"I'd be happy to\" or \"It should be noted.\" Ensure there is no AI attribution in the text and that all claims are grounded with evidence such as commands, numbers, or filenames. Use active voice and maintain a balanced structure with prose for context.\n\n### Vocabulary Substitutions\n\n- Replace **leverage** or **utilize** with **use**.\n- Replace **comprehensive** with **thorough** or **complete**.\n- Replace **robust** with **solid** or **reliable**.\n- Replace **facilitate** with **help** or **enable**.\n- Replace **streamline** with **simplify**.\n\n### Remediation\n\nIf the description contains slop, apply `Skill(scribe:doc-generator)` principles to ground claims with specifics, remove marketing language, and use direct statements.\n\n## Output Instructions\n\nWrite the final PR description to the specified path, then display the file path and its contents for confirmation.\n\n## Notes\n\nDo not include tool or AI attribution in the PR text. If changes are required mid-process, re-run quality gates. This skill covers preparation; pushing changes and opening the PR occurs outside this workflow.\n\n## Supporting Modules\n\n- [TodoWrite patterns](modules/todowrite-patterns.md) - naming conventions for sanctum TodoWrite items\n\n## Troubleshooting\n\nIf project-specific commands like `make` or `npm` are unavailable, verify the environment setup against the `README`. For permission errors, check write access to build directories. If a step fails without clear output, retry the command with verbose flags to inspect the logs.\n\nFile v1.9.16:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.9.16\",\n  \"publishedAt\": 1784059049055\n}\n\nFile v1.9.16:modules/pr-template.md\n\n# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue References\nLink related issues:\n```markdown\nFixes #456\nRelated to #789\nPart of #101\n```\n\n### Migration Guide\nFor breaking changes:\n```markdown\n## Migration Guide\n**Before:**\n\\`\\`\\`python\ngenerate_pdf(resume, \"output.pdf\")\n\\`\\`\\`\n\n**After:**\n\\`\\`\\`python\nresume.to_pdf(\"output.pdf\")\n\\`\\`\\`\n```\n\n### Performance Impact\nFor performance-related changes:\n```markdown\n## Performance Impact\n- PDF generation: 2.3s → 0.8s (65% improvement)\n- Memory usage: 150MB → 45MB\n- Benchmark results: [link to benchmark output]\n```\n\n### Security Considerations\nFor security-related changes:\n```markdown\n## Security Considerations\n- Input validation added for all user-supplied paths\n- Sanitization applied to template variables\n- No secrets or credentials in code or tests\n```\n\n## Best Practices for PR Descriptions\n\n### Do's\n- Be concise but complete\n- Focus on \"why\" not just \"what\"\n- Use bullet points for scannability\n- Include actual commands and results\n- Link to relevant issues\n- Highlight breaking changes prominently\n- Use code blocks for examples\n- Group related changes together\n\n### Don'ts\n- Include AI/tool attribution\n- Copy-paste entire file diffs\n- Use vague descriptions\n- Skip testing documentation\n- Hide breaking changes in middle of list\n- Include work-in-progress notes\n- Reference internal tool commands unless relevant\n\n## Writing Quality (scribe Integration)\n\nApply `scribe:doc-generator` principles to avoid AI-sounding text:\n\n### Vocabulary to Avoid\n\n| Instead of | Use |\n|------------|-----|\n| leverage | use |\n| utilize | use |\n| comprehensive | thorough |\n| robust | solid |\n| facilitate | help |\n| streamline | simplify |\n| seamless | smooth |\n| delve | explore |\n\n### Phrase Patterns to Remove\n\n- \"In order to...\" → \"To...\"\n- \"It should be noted that...\" → (just state it)\n- \"I'd be happy to...\" → (not relevant in PR text)\n- \"This ensures that...\" → (ground with specifics instead)\n- Marketing language: \"enterprise-ready\", \"cutting-edge\", \"best-in-class\"\n\n### Quality Checklist\n\nBefore finalizing a PR description:\n\n- [ ] No tier-1 slop words present\n- [ ] All claims grounded with specifics (numbers, files, commands)\n- [ ] Active voice used throughout\n- [ ] No formulaic openers or closers\n- [ ] Balanced structure (not all bullets)\n\n## Template Variations\n\n### Small Bug Fix\n```markdown\n## Summary\nFix null pointer exception in PDF generation when resume has no education section.\n\n## Changes\n- Add null check before accessing education fields\n- Add test case for resumes without education\n\n## Testing\n- `pytest tests/test_pdf_generation.py` - all passing\n- Verified fix with sample resume lacking education section\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\n### Feature Addition\n```markdown\n## Summary\nAdd support for exporting resumes to HTML format alongside existing PDF export.\n\n## Changes\n- **Core API**: Add `to_html()` method to Resume class\n- **Templates**: Create Jinja2 HTML templates matching PDF layouts\n- **Testing**: Add HTML generation tests and snapshot testing\n- **Documentation**: Update README with HTML export examples\n\n## Testing\n- `make test` - 52 tests passing (added 5 new tests)\n- `make lint` - no warnings\n- Manual verification: Generated HTML from 4 resume templates, verified in Chrome/Firefox\n- Snapshot tests validate HTML output consistency\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\nFile v1.9.16:modules/quality-gates.md\n\n# Quality Gates Pattern Reference\n\n## Common Quality Gate Commands by Language\n\n### Python Projects\n```bash\n# Formatting\nmake format          # or: black . && isort .\nruff format .\nuv run ruff format .\n\n# Linting\nmake lint            # or: ruff check .\nmypy .\npylint src/\n\n# Testing\nmake test            # or: pytest\npytest --cov=src --cov-report=term\nuv run pytest\n```\n\n### JavaScript/TypeScript Projects\n```bash\n# Formatting\nnpm run format       # or: prettier --write .\nyarn format\n\n# Linting\nnpm run lint         # or: eslint .\nyarn lint\n\n# Testing\nnpm test\nyarn test\njest --coverage\n```\n\n### Go Projects\n```bash\n# Formatting\ngo fmt ./...\ngofmt -w .\n\n# Linting\ngolangci-lint run\ngo vet ./...\n\n# Testing\ngo test ./...\ngo test -v -cover ./...\n```\n\n### Rust Projects\n```bash\n# Formatting\ncargo fmt\n\n# Linting\ncargo clippy -- -D warnings\n\n# Testing\ncargo test\ncargo test --all-features\n```\n\n## Failure Handling Patterns\n\n### When Quality Gates Fail\n1. **Capture the exact error output** - Don't summarize, show actual failures\n2. **Fix failures immediately** - Never proceed with failing tests\n3. **Re-run after fixes** - Confirm all gates pass before continuing\n4. **Document what was fixed** - Include in PR testing section\n\n### Common Failure Categories\n- **Formatting issues**: Auto-fix with formatter, then re-run\n- **Linting warnings**: Address or document why they're acceptable\n- **Test failures**: Fix the code or update tests as needed\n- **Type errors**: Resolve type mismatches or add proper annotations\n\n## Alternative Validation Approaches\n\n### When Local Tests Can't Run\n- **Missing dependencies**: Document what's missing and CI strategy\n- **Environment constraints**: Note platform-specific limitations\n- **Integration tests**: Explain which will run in CI only\n- **Manual verification**: Document steps taken locally instead\n\n### CI/CD Integration Notes\n```markdown\n## Testing\n- Local: `make test` - all unit tests passing\n- CI will run: integration tests, E2E tests, cross-platform builds\n- Manual verification: Tested CLI commands locally on Ubuntu 22.04\n```\n\n## Quality Gate Checklist\n- [ ] Formatting passes (no diffs after format command)\n- [ ] Linting passes (no warnings or errors)\n- [ ] All tests pass locally\n- [ ] Type checking passes (if applicable)\n- [ ] Build succeeds (if applicable)\n- [ ] Manual smoke testing completed\n\n## Special Cases\n\n### Pre-commit Hooks\nIf project has pre-commit hooks:\n```bash\npre-commit run --all-files\n```\nDocument any hooks that were run.\n\n### Multiple Test Suites\n```bash\n# Unit tests\npytest tests/unit/\n\n# Integration tests\npytest tests/integration/\n\n# E2E tests (may run in CI only)\n# Skipped locally - runs in CI environment\n```\n\n### Performance Tests\nNote if performance benchmarks exist but weren't run:\n```markdown\n## Testing\n- Unit tests: passing\n- Performance benchmarks: skipped (run in dedicated CI job)\n```\n\nFile v1.9.16:modules/todowrite-patterns.md\n\n---\nparent_skill: sanctum:shared\nname: todowrite-patterns\ndescription: TodoWrite naming conventions and patterns for sanctum skills\ncategory: patterns\ntags: [todowrite, naming, conventions]\nestimated_tokens: 150\n---\n\n# TodoWrite Patterns for Sanctum\n\n## Naming Convention\nAll sanctum skills follow a consistent pattern for TodoWrite items:\n```\n<skill-name>:<step-name>\n```\n\nThe skill name matches the frontmatter `name` field, and the step name describes the specific workflow phase.\n\n## Examples from Sanctum Skills\n\n### git-workspace-review\n```\ngit-review:repo-confirmed\ngit-review:status-overview\ngit-review:diff-stat\ngit-review:diff-details\n```\n\n### commit-messages\nCommit messages skill does not use TodoWrite as it's a single-step artifact generation workflow.\n\n### pr-prep\n```\npr-prep:workspace-reviewed\npr-prep:quality-gates\npr-prep:self-reviewed\npr-prep:changes-summarized\npr-prep:testing-documented\npr-prep:pr-drafted\npr-prep:content-verified\n```\n\n### doc-updates\n```\ndoc-updates:context-collected\ndoc-updates:targets-identified\ndoc-updates:consolidation-checked\ndoc-updates:edits-applied\ndoc-updates:guidelines-verified\ndoc-updates:accuracy-verified\ndoc-updates:preview\n```\n\n### version-updates\n```\nversion-update:context-collected\nversion-update:target-files\nversion-update:version-set\nversion-update:docs-updated\nversion-update:verification\n```\n\n## Task Deletion (Claude Code 2.1.20+)\n\nTaskUpdate now supports deleting tasks. Use deletion to clean up completed workflow items and reduce clutter in the `/tasks` view.\n\n> **2.1.21 fix**: Task IDs are no longer reused after deletion. On 2.1.20, deleting a task and creating a new one could silently reuse the same ID, leaking old state into new tasks. Upgrade to 2.1.21+ if using task deletion.\n\n### When to Delete\n- After a workflow completes successfully and all items are marked done\n- Stale items from interrupted or abandoned workflows\n- Temporary tracking items that served their purpose\n\n### When NOT to Delete\n- Items that serve as audit trails (proof-of-work items)\n- Items referenced by other active workflows\n- Items the user may want to review later\n\n### Deletion Pattern\n```\n# After workflow completion, clean up tracking items:\nTaskUpdate(id: \"pr-prep:workspace-reviewed\", delete: true)\nTaskUpdate(id: \"pr-prep:quality-gates\", delete: true)\n```\n\n### Recommended Approach\nCreate → Complete → (optionally) Delete stale items after workflow success. Keep proof-of-work and audit items intact.\n\n## Best Practices\n\n### Step Naming\n- Use present tense verbs (collected, identified, applied, verified)\n- Keep names concise (2-3 words max)\n- Make the outcome clear from the name\n- Order steps sequentially in the workflow\n\n### When to Skip TodoWrite\n- Single-step workflows (like commit-messages)\n- Quick utilities that complete in one operation\n- Read-only analysis with no discrete phases\n\n### Integration\n- Create all TodoWrite items at workflow start\n- Mark items complete immediately after finishing each step\n- Use TodoWrite as workflow documentation for users\n\nFile v1.9.16:skill-card.md\n\n## Description: <br>\nPrepares pull requests by running quality gates, drafting descriptions, and validating tests. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and maintainers use this skill to prepare pull requests by reviewing workspace state, running quality gates, self-reviewing changes, documenting testing, and drafting a PR description. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may prepare GitHub-facing PR text or review evidence from local repository state. <br>\nMitigation: Review generated PR descriptions, comments, and any public GitHub writes before posting or publishing them. <br>\nRisk: The workflow asks the agent to run project-specific formatting, linting, and test commands. <br>\nMitigation: Run commands only in a trusted workspace, inspect command intent first, and document skipped or failed checks with a mitigation plan. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-pr-prep) <br>\n- [Night Market Sanctum plugin](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown with inline shell commands and checklist items] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces a PR description path and contents, with validation commands, testing notes, and checklist items.] <br>\n\n## Skill Version(s): <br>\n1.9.16 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.14: 6 files, 10472 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (2570b), SKILL.md (6490b), _meta.json (138b)\n\nFile v1.9.14:SKILL.md\n\n---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true\n```\n\n**Additive bias audit:**\n\nRun `Skill(imbue:justify)` to compute the additive bias\nscore and check Iron Law compliance. If the score is\nYELLOW or above, justify each flagged signal before\nproceeding. If RED or STOP, rethink the approach.\n\n**Manual verification:**\n\n- [ ] Read the full diff -- does every change serve the\n      stated goal?\n- [ ] No debug statements or `TODO` markers left in\n- [ ] No commented-out code blocks\n- [ ] No formatting changes mixed with logic changes\n- [ ] No fixup commits that should be squashed\n- [ ] Additive bias score is GREEN or justified YELLOW\n- [ ] Iron Law compliance: PASS (no test tampering)\n\nIf issues are found, fix them before proceeding.\n\n## Step 3: Summarize Changes (`changes-summarized`)\n\nUse the notes from the workspace review and the output of `git diff --stat origin/main...HEAD` to understand the scope. Identify key points in the diffs and group them into 2-4 paragraphs highlighting the technical changes and their rationale. Note breaking changes, migrations, or documentation updates.\n\n## Step 4: Document Testing (`testing-documented`)\n\nList each test command executed and its result. Include manual verification steps where relevant. If tests were skipped, document the reason and the mitigation plan.\n\n## Step 5: Draft the PR (`pr-drafted`)\n\nPopulate the standard template with Summary, Changes, Testing, and Checklist sections. Include issue references, screenshots, or follow-up TODO items. Template structure and examples are available in `modules/pr-template.md`.\n\n## Step 6: Verify Content Quality (`content-verified`)\n\nApply `Skill(scribe:slop-detector)` principles to the draft. Verify that the PR description avoids tier-1 slop words (delve, comprehensive, leverage, utilize, robust, seamless) and formulaic phrases like \"I'd be happy to\" or \"It should be noted.\" Ensure there is no AI attribution in the text and that all claims are grounded with evidence such as commands, numbers, or filenames. Use active voice and maintain a balanced structure with prose for context.\n\n### Vocabulary Substitutions\n\n- Replace **leverage** or **utilize** with **use**.\n- Replace **comprehensive** with **thorough** or **complete**.\n- Replace **robust** with **solid** or **reliable**.\n- Replace **facilitate** with **help** or **enable**.\n- Replace **streamline** with **simplify**.\n\n### Remediation\n\nIf the description contains slop, apply `Skill(scribe:doc-generator)` principles to ground claims with specifics, remove marketing language, and use direct statements.\n\n## Output Instructions\n\nWrite the final PR description to the specified path, then display the file path and its contents for confirmation.\n\n## Notes\n\nDo not include tool or AI attribution in the PR text. If changes are required mid-process, re-run quality gates. This skill covers preparation; pushing changes and opening the PR occurs outside this workflow.\n\n## Supporting Modules\n\n- [TodoWrite patterns](modules/todowrite-patterns.md) - naming conventions for sanctum TodoWrite items\n\n## Troubleshooting\n\nIf project-specific commands like `make` or `npm` are unavailable, verify the environment setup against the `README`. For permission errors, check write access to build directories. If a step fails without clear output, retry the command with verbose flags to inspect the logs.\n\nFile v1.9.14:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.9.14\",\n  \"publishedAt\": 1782842720969\n}\n\nFile v1.9.14:modules/pr-template.md\n\n# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue References\nLink related issues:\n```markdown\nFixes #456\nRelated to #789\nPart of #101\n```\n\n### Migration Guide\nFor breaking changes:\n```markdown\n## Migration Guide\n**Before:**\n\\`\\`\\`python\ngenerate_pdf(resume, \"output.pdf\")\n\\`\\`\\`\n\n**After:**\n\\`\\`\\`python\nresume.to_pdf(\"output.pdf\")\n\\`\\`\\`\n```\n\n### Performance Impact\nFor performance-related changes:\n```markdown\n## Performance Impact\n- PDF generation: 2.3s → 0.8s (65% improvement)\n- Memory usage: 150MB → 45MB\n- Benchmark results: [link to benchmark output]\n```\n\n### Security Considerations\nFor security-related changes:\n```markdown\n## Security Considerations\n- Input validation added for all user-supplied paths\n- Sanitization applied to template variables\n- No secrets or credentials in code or tests\n```\n\n## Best Practices for PR Descriptions\n\n### Do's\n- Be concise but complete\n- Focus on \"why\" not just \"what\"\n- Use bullet points for scannability\n- Include actual commands and results\n- Link to relevant issues\n- Highlight breaking changes prominently\n- Use code blocks for examples\n- Group related changes together\n\n### Don'ts\n- Include AI/tool attribution\n- Copy-paste entire file diffs\n- Use vague descriptions\n- Skip testing documentation\n- Hide breaking changes in middle of list\n- Include work-in-progress notes\n- Reference internal tool commands unless relevant\n\n## Writing Quality (scribe Integration)\n\nApply `scribe:doc-generator` principles to avoid AI-sounding text:\n\n### Vocabulary to Avoid\n\n| Instead of | Use |\n|------------|-----|\n| leverage | use |\n| utilize | use |\n| comprehensive | thorough |\n| robust | solid |\n| facilitate | help |\n| streamline | simplify |\n| seamless | smooth |\n| delve | explore |\n\n### Phrase Patterns to Remove\n\n- \"In order to...\" → \"To...\"\n- \"It should be noted that...\" → (just state it)\n- \"I'd be happy to...\" → (not relevant in PR text)\n- \"This ensures that...\" → (ground with specifics instead)\n- Marketing language: \"enterprise-ready\", \"cutting-edge\", \"best-in-class\"\n\n### Quality Checklist\n\nBefore finalizing a PR description:\n\n- [ ] No tier-1 slop words present\n- [ ] All claims grounded with specifics (numbers, files, commands)\n- [ ] Active voice used throughout\n- [ ] No formulaic openers or closers\n- [ ] Balanced structure (not all bullets)\n\n## Template Variations\n\n### Small Bug Fix\n```markdown\n## Summary\nFix null pointer exception in PDF generation when resume has no education section.\n\n## Changes\n- Add null check before accessing education fields\n- Add test case for resumes without education\n\n## Testing\n- `pytest tests/test_pdf_generation.py` - all passing\n- Verified fix with sample resume lacking education section\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\n### Feature Addition\n```markdown\n## Summary\nAdd support for exporting resumes to HTML format alongside existing PDF export.\n\n## Changes\n- **Core API**: Add `to_html()` method to Resume class\n- **Templates**: Create Jinja2 HTML templates matching PDF layouts\n- **Testing**: Add HTML generation tests and snapshot testing\n- **Documentation**: Update README with HTML export examples\n\n## Testing\n- `make test` - 52 tests passing (added 5 new tests)\n- `make lint` - no warnings\n- Manual verification: Generated HTML from 4 resume templates, verified in Chrome/Firefox\n- Snapshot tests validate HTML output consistency\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\nFile v1.9.14:modules/quality-gates.md\n\n# Quality Gates Pattern Reference\n\n## Common Quality Gate Commands by Language\n\n### Python Projects\n```bash\n# Formatting\nmake format          # or: black . && isort .\nruff format .\nuv run ruff format .\n\n# Linting\nmake lint            # or: ruff check .\nmypy .\npylint src/\n\n# Testing\nmake test            # or: pytest\npytest --cov=src --cov-report=term\nuv run pytest\n```\n\n### JavaScript/TypeScript Projects\n```bash\n# Formatting\nnpm run format       # or: prettier --write .\nyarn format\n\n# Linting\nnpm run lint         # or: eslint .\nyarn lint\n\n# Testing\nnpm test\nyarn test\njest --coverage\n```\n\n### Go Projects\n```bash\n# Formatting\ngo fmt ./...\ngofmt -w .\n\n# Linting\ngolangci-lint run\ngo vet ./...\n\n# Testing\ngo test ./...\ngo test -v -cover ./...\n```\n\n### Rust Projects\n```bash\n# Formatting\ncargo fmt\n\n# Linting\ncargo clippy -- -D warnings\n\n# Testing\ncargo test\ncargo test --all-features\n```\n\n## Failure Handling Patterns\n\n### When Quality Gates Fail\n1. **Capture the exact error output** - Don't summarize, show actual failures\n2. **Fix failures immediately** - Never proceed with failing tests\n3. **Re-run after fixes** - Confirm all gates pass before continuing\n4. **Document what was fixed** - Include in PR testing section\n\n### Common Failure Categories\n- **Formatting issues**: Auto-fix with formatter, then re-run\n- **Linting warnings**: Address or document why they're acceptable\n- **Test failures**: Fix the code or update tests as needed\n- **Type errors**: Resolve type mismatches or add proper annotations\n\n## Alternative Validation Approaches\n\n### When Local Tests Can't Run\n- **Missing dependencies**: Document what's missing and CI strategy\n- **Environment constraints**: Note platform-specific limitations\n- **Integration tests**: Explain which will run in CI only\n- **Manual verification**: Document steps taken locally instead\n\n### CI/CD Integration Notes\n```markdown\n## Testing\n- Local: `make test` - all unit tests passing\n- CI will run: integration tests, E2E tests, cross-platform builds\n- Manual verification: Tested CLI commands locally on Ubuntu 22.04\n```\n\n## Quality Gate Checklist\n- [ ] Formatting passes (no diffs after format command)\n- [ ] Linting passes (no warnings or errors)\n- [ ] All tests pass locally\n- [ ] Type checking passes (if applicable)\n- [ ] Build succeeds (if applicable)\n- [ ] Manual smoke testing completed\n\n## Special Cases\n\n### Pre-commit Hooks\nIf project has pre-commit hooks:\n```bash\npre-commit run --all-files\n```\nDocument any hooks that were run.\n\n### Multiple Test Suites\n```bash\n# Unit tests\npytest tests/unit/\n\n# Integration tests\npytest tests/integration/\n\n# E2E tests (may run in CI only)\n# Skipped locally - runs in CI environment\n```\n\n### Performance Tests\nNote if performance benchmarks exist but weren't run:\n```markdown\n## Testing\n- Unit tests: passing\n- Performance benchmarks: skipped (run in dedicated CI job)\n```\n\nFile v1.9.14:modules/todowrite-patterns.md\n\n---\nparent_skill: sanctum:shared\nname: todowrite-patterns\ndescription: TodoWrite naming conventions and patterns for sanctum skills\ncategory: patterns\ntags: [todowrite, naming, conventions]\nestimated_tokens: 150\n---\n\n# TodoWrite Patterns for Sanctum\n\n## Naming Convention\nAll sanctum skills follow a consistent pattern for TodoWrite items:\n```\n<skill-name>:<step-name>\n```\n\nThe skill name matches the frontmatter `name` field, and the step name describes the specific workflow phase.\n\n## Examples from Sanctum Skills\n\n### git-workspace-review\n```\ngit-review:repo-confirmed\ngit-review:status-overview\ngit-review:diff-stat\ngit-review:diff-details\n```\n\n### commit-messages\nCommit messages skill does not use TodoWrite as it's a single-step artifact generation workflow.\n\n### pr-prep\n```\npr-prep:workspace-reviewed\npr-prep:quality-gates\npr-prep:self-reviewed\npr-prep:changes-summarized\npr-prep:testing-documented\npr-prep:pr-drafted\npr-prep:content-verified\n```\n\n### doc-updates\n```\ndoc-updates:context-collected\ndoc-updates:targets-identified\ndoc-updates:consolidation-checked\ndoc-updates:edits-applied\ndoc-updates:guidelines-verified\ndoc-updates:accuracy-verified\ndoc-updates:preview\n```\n\n### version-updates\n```\nversion-update:context-collected\nversion-update:target-files\nversion-update:version-set\nversion-update:docs-updated\nversion-update:verification\n```\n\n## Task Deletion (Claude Code 2.1.20+)\n\nTaskUpdate now supports deleting tasks. Use deletion to clean up completed workflow items and reduce clutter in the `/tasks` view.\n\n> **2.1.21 fix**: Task IDs are no longer reused after deletion. On 2.1.20, deleting a task and creating a new one could silently reuse the same ID, leaking old state into new tasks. Upgrade to 2.1.21+ if using task deletion.\n\n### When to Delete\n- After a workflow completes successfully and all items are marked done\n- Stale items from interrupted or abandoned workflows\n- Temporary tracking items that served their purpose\n\n### When NOT to Delete\n- Items that serve as audit trails (proof-of-work items)\n- Items referenced by other active workflows\n- Items the user may want to review later\n\n### Deletion Pattern\n```\n# After workflow completion, clean up tracking items:\nTaskUpdate(id: \"pr-prep:workspace-reviewed\", delete: true)\nTaskUpdate(id: \"pr-prep:quality-gates\", delete: true)\n```\n\n### Recommended Approach\nCreate → Complete → (optionally) Delete stale items after workflow success. Keep proof-of-work and audit items intact.\n\n## Best Practices\n\n### Step Naming\n- Use present tense verbs (collected, identified, applied, verified)\n- Keep names concise (2-3 words max)\n- Make the outcome clear from the name\n- Order steps sequentially in the workflow\n\n### When to Skip TodoWrite\n- Single-step workflows (like commit-messages)\n- Quick utilities that complete in one operation\n- Read-only analysis with no discrete phases\n\n### Integration\n- Create all TodoWrite items at workflow start\n- Mark items complete immediately after finishing each step\n- Use TodoWrite as workflow documentation for users\n\nFile v1.9.14:skill-card.md\n\n## Description: <br>\nPrepares pull requests by running quality gates, drafting descriptions, and validating tests. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and maintainers use this skill to prepare repository changes for pull requests by reviewing diffs, running quality gates, documenting testing, and drafting PR descriptions. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Repository quality commands, formatters, or documentation sync steps may modify files in the working tree. <br>\nMitigation: Review the final diff before committing or opening a pull request, and rerun relevant quality checks after any automatic changes. <br>\nRisk: The skill reads repository diffs and may include sensitive or internal details in the drafted PR description. <br>\nMitigation: Review the generated PR text before publishing and remove secrets, private context, or unsupported claims. <br>\nRisk: PR summaries and testing notes can become inaccurate if command results are skipped, stale, or summarized from incomplete output. <br>\nMitigation: Ground the PR description in current diffs and exact command results, and document skipped tests with the reason and follow-up validation plan. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-pr-prep) <br>\n- [Project homepage from metadata](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n- [Quality gates module](artifact/modules/quality-gates.md) <br>\n- [PR template module](artifact/modules/pr-template.md) <br>\n- [TodoWrite patterns module](artifact/modules/todowrite-patterns.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown PR description with command/result summaries, checklist items, and inline shell command references.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include repository-specific quality commands, file paths, testing notes, and follow-up items.] <br>\n\n## Skill Version(s): <br>\n1.9.14 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.13: 6 files, 10306 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (2082b), SKILL.md (6490b), _meta.json (138b)\n\nFile v1.9.13:SKILL.md\n\n---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true\n```\n\n**Additive bias audit:**\n\nRun `Skill(imbue:justify)` to compute the additive bias\nscore and check Iron Law compliance. If the score is\nYELLOW or above, justify each flagged signal before\nproceeding. If RED or STOP, rethink the approach.\n\n**Manual verification:**\n\n- [ ] Read the full diff -- does every change serve the\n      stated goal?\n- [ ] No debug statements or `TODO` markers left in\n- [ ] No commented-out code blocks\n- [ ] No formatting changes mixed with logic changes\n- [ ] No fixup commits that should be squashed\n- [ ] Additive bias score is GREEN or justified YELLOW\n- [ ] Iron Law compliance: PASS (no test tampering)\n\nIf issues are found, fix them before proceeding.\n\n## Step 3: Summarize Changes (`changes-summarized`)\n\nUse the notes from the workspace review and the output of `git diff --stat origin/main...HEAD` to understand the scope. Identify key points in the diffs and group them into 2-4 paragraphs highlighting the technical changes and their rationale. Note breaking changes, migrations, or documentation updates.\n\n## Step 4: Document Testing (`testing-documented`)\n\nList each test command executed and its result. Include manual verification steps where relevant. If tests were skipped, document the reason and the mitigation plan.\n\n## Step 5: Draft the PR (`pr-drafted`)\n\nPopulate the standard template with Summary, Changes, Testing, and Checklist sections. Include issue references, screenshots, or follow-up TODO items. Template structure and examples are available in `modules/pr-template.md`.\n\n## Step 6: Verify Content Quality (`content-verified`)\n\nApply `Skill(scribe:slop-detector)` principles to the draft. Verify that the PR description avoids tier-1 slop words (delve, comprehensive, leverage, utilize, robust, seamless) and formulaic phrases like \"I'd be happy to\" or \"It should be noted.\" Ensure there is no AI attribution in the text and that all claims are grounded with evidence such as commands, numbers, or filenames. Use active voice and maintain a balanced structure with prose for context.\n\n### Vocabulary Substitutions\n\n- Replace **leverage** or **utilize** with **use**.\n- Replace **comprehensive** with **thorough** or **complete**.\n- Replace **robust** with **solid** or **reliable**.\n- Replace **facilitate** with **help** or **enable**.\n- Replace **streamline** with **simplify**.\n\n### Remediation\n\nIf the description contains slop, apply `Skill(scribe:doc-generator)` principles to ground claims with specifics, remove marketing language, and use direct statements.\n\n## Output Instructions\n\nWrite the final PR description to the specified path, then display the file path and its contents for confirmation.\n\n## Notes\n\nDo not include tool or AI attribution in the PR text. If changes are required mid-process, re-run quality gates. This skill covers preparation; pushing changes and opening the PR occurs outside this workflow.\n\n## Supporting Modules\n\n- [TodoWrite patterns](modules/todowrite-patterns.md) - naming conventions for sanctum TodoWrite items\n\n## Troubleshooting\n\nIf project-specific commands like `make` or `npm` are unavailable, verify the environment setup against the `README`. For permission errors, check write access to build directories. If a step fails without clear output, retry the command with verbose flags to inspect the logs.\n\nFile v1.9.13:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.9.13\",\n  \"publishedAt\": 1782577393333\n}\n\nFile v1.9.13:modules/pr-template.md\n\n# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue References\nLink related issues:\n```markdown\nFixes #456\nRelated to #789\nPart of #101\n```\n\n### Migration Guide\nFor breaking changes:\n```markdown\n## Migration Guide\n**Before:**\n\\`\\`\\`python\ngenerate_pdf(resume, \"output.pdf\")\n\\`\\`\\`\n\n**After:**\n\\`\\`\\`python\nresume.to_pdf(\"output.pdf\")\n\\`\\`\\`\n```\n\n### Performance Impact\nFor performance-related changes:\n```markdown\n## Performance Impact\n- PDF generation: 2.3s → 0.8s (65% improvement)\n- Memory usage: 150MB → 45MB\n- Benchmark results: [link to benchmark output]\n```\n\n### Security Considerations\nFor security-related changes:\n```markdown\n## Security Considerations\n- Input validation added for all user-supplied paths\n- Sanitization applied to template variables\n- No secrets or credentials in code or tests\n```\n\n## Best Practices for PR Descriptions\n\n### Do's\n- Be concise but complete\n- Focus on \"why\" not just \"what\"\n- Use bullet points for scannability\n- Include actual commands and results\n- Link to relevant issues\n- Highlight breaking changes prominently\n- Use code blocks for examples\n- Group related changes together\n\n### Don'ts\n- Include AI/tool attribution\n- Copy-paste entire file diffs\n- Use vague descriptions\n- Skip testing documentation\n- Hide breaking changes in middle of list\n- Include work-in-progress notes\n- Reference internal tool commands unless relevant\n\n## Writing Quality (scribe Integration)\n\nApply `scribe:doc-generator` principles to avoid AI-sounding text:\n\n### Vocabulary to Avoid\n\n| Instead of | Use |\n|------------|-----|\n| leverage | use |\n| utilize | use |\n| comprehensive | thorough |\n| robust | solid |\n| facilitate | help |\n| streamline | simplify |\n| seamless | smooth |\n| delve | explore |\n\n### Phrase Patterns to Remove\n\n- \"In order to...\" → \"To...\"\n- \"It should be noted that...\" → (just state it)\n- \"I'd be happy to...\" → (not relevant in PR text)\n- \"This ensures that...\" → (ground with specifics instead)\n- Marketing language: \"enterprise-ready\", \"cutting-edge\", \"best-in-class\"\n\n### Quality Checklist\n\nBefore finalizing a PR description:\n\n- [ ] No tier-1 slop words present\n- [ ] All claims grounded with specifics (numbers, files, commands)\n- [ ] Active voice used throughout\n- [ ] No formulaic openers or closers\n- [ ] Balanced structure (not all bullets)\n\n## Template Variations\n\n### Small Bug Fix\n```markdown\n## Summary\nFix null pointer exception in PDF generation when resume has no education section.\n\n## Changes\n- Add null check before accessing education fields\n- Add test case for resumes without education\n\n## Testing\n- `pytest tests/test_pdf_generation.py` - all passing\n- Verified fix with sample resume lacking education section\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\n### Feature Addition\n```markdown\n## Summary\nAdd support for exporting resumes to HTML format alongside existing PDF export.\n\n## Changes\n- **Core API**: Add `to_html()` method to Resume class\n- **Templates**: Create Jinja2 HTML templates matching PDF layouts\n- **Testing**: Add HTML generation tests and snapshot testing\n- **Documentation**: Update README with HTML export examples\n\n## Testing\n- `make test` - 52 tests passing (added 5 new tests)\n- `make lint` - no warnings\n- Manual verification: Generated HTML from 4 resume templates, verified in Chrome/Firefox\n- Snapshot tests validate HTML output consistency\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\nFile v1.9.13:modules/quality-gates.md\n\n# Quality Gates Pattern Reference\n\n## Common Quality Gate Commands by Language\n\n### Python Projects\n```bash\n# Formatting\nmake format          # or: black . && isort .\nruff format .\nuv run ruff format .\n\n# Linting\nmake lint            # or: ruff check .\nmypy .\npylint src/\n\n# Testing\nmake test            # or: pytest\npytest --cov=src --cov-report=term\nuv run pytest\n```\n\n### JavaScript/TypeScript Projects\n```bash\n# Formatting\nnpm run format       # or: prettier --write .\nyarn format\n\n# Linting\nnpm run lint         # or: eslint .\nyarn lint\n\n# Testing\nnpm test\nyarn test\njest --coverage\n```\n\n### Go Projects\n```bash\n# Formatting\ngo fmt ./...\ngofmt -w .\n\n# Linting\ngolangci-lint run\ngo vet ./...\n\n# Testing\ngo test ./...\ngo test -v -cover ./...\n```\n\n### Rust Projects\n```bash\n# Formatting\ncargo fmt\n\n# Linting\ncargo clippy -- -D warnings\n\n# Testing\ncargo test\ncargo test --all-features\n```\n\n## Failure Handling Patterns\n\n### When Quality Gates Fail\n1. **Capture the exact error output** - Don't summarize, show actual failures\n2. **Fix failures immediately** - Never proceed with failing tests\n3. **Re-run after fixes** - Confirm all gates pass before continuing\n4. **Document what was fixed** - Include in PR testing section\n\n### Common Failure Categories\n- **Formatting issues**: Auto-fix with formatter, then re-run\n- **Linting warnings**: Address or document why they're acceptable\n- **Test failures**: Fix the code or update tests as needed\n- **Type errors**: Resolve type mismatches or add proper annotations\n\n## Alternative Validation Approaches\n\n### When Local Tests Can't Run\n- **Missing dependencies**: Document what's missing and CI strategy\n- **Environment constraints**: Note platform-specific limitations\n- **Integration tests**: Explain which will run in CI only\n- **Manual verification**: Document steps taken locally instead\n\n### CI/CD Integration Notes\n```markdown\n## Testing\n- Local: `make test` - all unit tests passing\n- CI will run: integration tests, E2E tests, cross-platform builds\n- Manual verification: Tested CLI commands locally on Ubuntu 22.04\n```\n\n## Quality Gate Checklist\n- [ ] Formatting passes (no diffs after format command)\n- [ ] Linting passes (no warnings or errors)\n- [ ] All tests pass locally\n- [ ] Type checking passes (if applicable)\n- [ ] Build succeeds (if applicable)\n- [ ] Manual smoke testing completed\n\n## Special Cases\n\n### Pre-commit Hooks\nIf project has pre-commit hooks:\n```bash\npre-commit run --all-files\n```\nDocument any hooks that were run.\n\n### Multiple Test Suites\n```bash\n# Unit tests\npytest tests/unit/\n\n# Integration tests\npytest tests/integration/\n\n# E2E tests (may run in CI only)\n# Skipped locally - runs in CI environment\n```\n\n### Performance Tests\nNote if performance benchmarks exist but weren't run:\n```markdown\n## Testing\n- Unit tests: passing\n- Performance benchmarks: skipped (run in dedicated CI job)\n```\n\nFile v1.9.13:modules/todowrite-patterns.md\n\n---\nparent_skill: sanctum:shared\nname: todowrite-patterns\ndescription: TodoWrite naming conventions and patterns for sanctum skills\ncategory: patterns\ntags: [todowrite, naming, conventions]\nestimated_tokens: 150\n---\n\n# TodoWrite Patterns for Sanctum\n\n## Naming Convention\nAll sanctum skills follow a consistent pattern for TodoWrite items:\n```\n<skill-name>:<step-name>\n```\n\nThe skill name matches the frontmatter `name` field, and the step name describes the specific workflow phase.\n\n## Examples from Sanctum Skills\n\n### git-workspace-review\n```\ngit-review:repo-confirmed\ngit-review:status-overview\ngit-review:diff-stat\ngit-review:diff-details\n```\n\n### commit-messages\nCommit messages skill does not use TodoWrite as it's a single-step artifact generation workflow.\n\n### pr-prep\n```\npr-prep:workspace-reviewed\npr-prep:quality-gates\npr-prep:self-reviewed\npr-prep:changes-summarized\npr-prep:testing-documented\npr-prep:pr-drafted\npr-prep:content-verified\n```\n\n### doc-updates\n```\ndoc-updates:context-collected\ndoc-updates:targets-identified\ndoc-updates:consolidation-checked\ndoc-updates:edits-applied\ndoc-updates:guidelines-verified\ndoc-updates:accuracy-verified\ndoc-updates:preview\n```\n\n### version-updates\n```\nversion-update:context-collected\nversion-update:target-files\nversion-update:version-set\nversion-update:docs-updated\nversion-update:verification\n```\n\n## Task Deletion (Claude Code 2.1.20+)\n\nTaskUpdate now supports deleting tasks. Use deletion to clean up completed workflow items and reduce clutter in the `/tasks` view.\n\n> **2.1.21 fix**: Task IDs are no longer reused after deletion. On 2.1.20, deleting a task and creating a new one could silently reuse the same ID, leaking old state into new tasks. Upgrade to 2.1.21+ if using task deletion.\n\n### When to Delete\n- After a workflow completes successfully and all items are marked done\n- Stale items from interrupted or abandoned workflows\n- Temporary tracking items that served their purpose\n\n### When NOT to Delete\n- Items that serve as audit trails (proof-of-work items)\n- Items referenced by other active workflows\n- Items the user may want to review later\n\n### Deletion Pattern\n```\n# After workflow completion, clean up tracking items:\nTaskUpdate(id: \"pr-prep:workspace-reviewed\", delete: true)\nTaskUpdate(id: \"pr-prep:quality-gates\", delete: true)\n```\n\n### Recommended Approach\nCreate → Complete → (optionally) Delete stale items after workflow success. Keep proof-of-work and audit items intact.\n\n## Best Practices\n\n### Step Naming\n- Use present tense verbs (collected, identified, applied, verified)\n- Keep names concise (2-3 words max)\n- Make the outcome clear from the name\n- Order steps sequentially in the workflow\n\n### When to Skip TodoWrite\n- Single-step workflows (like commit-messages)\n- Quick utilities that complete in one operation\n- Read-only analysis with no discrete phases\n\n### Integration\n- Create all TodoWrite items at workflow start\n- Mark items complete immediately after finishing each step\n- Use TodoWrite as workflow documentation for users\n\nFile v1.9.13:skill-card.md\n\n## Description: <br>\nPrepares pull requests by running quality gates, drafting descriptions, and validating tests. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to prepare pull requests by reviewing workspace state, running quality gates, summarizing changes, documenting tests, and drafting a PR description. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may activate on broad PR or git-related requests and can write or overwrite a PR description at the path provided by the user. <br>\nMitigation: Use it in repositories where PR workflow assistance is intended, choose an explicit output path, and review the generated description before relying on it. <br>\nRisk: Quality gate commands may be unavailable or unsuitable for the local project environment. <br>\nMitigation: Run project-specific validation where possible, document any skipped local checks, and record alternative validation in the PR description. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/athola/skills/nm-sanctum-pr-prep) <br>\n- [Sanctum Plugin Homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown with inline shell commands and checklist items] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes the PR description to a user-specified path and displays the path and contents for review.] <br>\n\n## Skill Version(s): <br>\n1.9.13 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.12: 6 files, 10286 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (2069b), SKILL.md (6490b), _meta.json (138b)\n\nFile v1.9.12:SKILL.md\n\n---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true\n```\n\n**Additive bias audit:**\n\nRun `Skill(imbue:justify)` to compute the additive bias\nscore and check Iron Law compliance. If the score is\nYELLOW or above, justify each flagged signal before\nproceeding. If RED or STOP, rethink the approach.\n\n**Manual verification:**\n\n- [ ] Read the full diff -- does every change serve the\n      stated goal?\n- [ ] No debug statements or `TODO` markers left in\n- [ ] No commented-out code blocks\n- [ ] No formatting changes mixed with logic changes\n- [ ] No fixup commits that should be squashed\n- [ ] Additive bias score is GREEN or justified YELLOW\n- [ ] Iron Law compliance: PASS (no test tampering)\n\nIf issues are found, fix them before proceeding.\n\n## Step 3: Summarize Changes (`changes-summarized`)\n\nUse the notes from the workspace review and the output of `git diff --stat origin/main...HEAD` to understand the scope. Identify key points in the diffs and group them into 2-4 paragraphs highlighting the technical changes and their rationale. Note breaking changes, migrations, or documentation updates.\n\n## Step 4: Document Testing (`testing-documented`)\n\nList each test command executed and its result. Include manual verification steps where relevant. If tests were skipped, document the reason and the mitigation plan.\n\n## Step 5: Draft the PR (`pr-drafted`)\n\nPopulate the standard template with Summary, Changes, Testing, and Checklist sections. Include issue references, screenshots, or follow-up TODO items. Template structure and examples are available in `modules/pr-template.md`.\n\n## Step 6: Verify Content Quality (`content-verified`)\n\nApply `Skill(scribe:slop-detector)` principles to the draft. Verify that the PR description avoids tier-1 slop words (delve, comprehensive, leverage, utilize, robust, seamless) and formulaic phrases like \"I'd be happy to\" or \"It should be noted.\" Ensure there is no AI attribution in the text and that all claims are grounded with evidence such as commands, numbers, or filenames. Use active voice and maintain a balanced structure with prose for context.\n\n### Vocabulary Substitutions\n\n- Replace **leverage** or **utilize** with **use**.\n- Replace **comprehensive** with **thorough** or **complete**.\n- Replace **robust** with **solid** or **reliable**.\n- Replace **facilitate** with **help** or **enable**.\n- Replace **streamline** with **simplify**.\n\n### Remediation\n\nIf the description contains slop, apply `Skill(scribe:doc-generator)` principles to ground claims with specifics, remove marketing language, and use direct statements.\n\n## Output Instructions\n\nWrite the final PR description to the specified path, then display the file path and its contents for confirmation.\n\n## Notes\n\nDo not include tool or AI attribution in the PR text. If changes are required mid-process, re-run quality gates. This skill covers preparation; pushing changes and opening the PR occurs outside this workflow.\n\n## Supporting Modules\n\n- [TodoWrite patterns](modules/todowrite-patterns.md) - naming conventions for sanctum TodoWrite items\n\n## Troubleshooting\n\nIf project-specific commands like `make` or `npm` are unavailable, verify the environment setup against the `README`. For permission errors, check write access to build directories. If a step fails without clear output, retry the command with verbose flags to inspect the logs.\n\nFile v1.9.12:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.9.12\",\n  \"publishedAt\": 1781839118375\n}\n\nFile v1.9.12:modules/pr-template.md\n\n# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue References\nLink related issues:\n```markdown\nFixes #456\nRelated to #789\nPart of #101\n```\n\n### Migration Guide\nFor breaking changes:\n```markdown\n## Migration Guide\n**Before:**\n\\`\\`\\`python\ngenerate_pdf(resume, \"output.pdf\")\n\\`\\`\\`\n\n**After:**\n\\`\\`\\`python\nresume.to_pdf(\"output.pdf\")\n\\`\\`\\`\n```\n\n### Performance Impact\nFor performance-related changes:\n```markdown\n## Performance Impact\n- PDF generation: 2.3s → 0.8s (65% improvement)\n- Memory usage: 150MB → 45MB\n- Benchmark results: [link to benchmark output]\n```\n\n### Security Considerations\nFor security-related changes:\n```markdown\n## Security Considerations\n- Input validation added for all user-supplied paths\n- Sanitization applied to template variables\n- No secrets or credentials in code or tests\n```\n\n## Best Practices for PR Descriptions\n\n### Do's\n- Be concise but complete\n- Focus on \"why\" not just \"what\"\n- Use bullet points for scannability\n- Include actual commands and results\n- Link to relevant issues\n- Highlight breaking changes prominently\n- Use code blocks for examples\n- Group related changes together\n\n### Don'ts\n- Include AI/tool attribution\n- Copy-paste entire file diffs\n- Use vague descriptions\n- Skip testing documentation\n- Hide breaking changes in middle of list\n- Include work-in-progress notes\n- Reference internal tool commands unless relevant\n\n## Writing Quality (scribe Integration)\n\nApply `scribe:doc-generator` principles to avoid AI-sounding text:\n\n### Vocabulary to Avoid\n\n| Instead of | Use |\n|------------|-----|\n| leverage | use |\n| utilize | use |\n| comprehensive | thorough |\n| robust | solid |\n| facilitate | help |\n| streamline | simplify |\n| seamless | smooth |\n| delve | explore |\n\n### Phrase Patterns to Remove\n\n- \"In order to...\" → \"To...\"\n- \"It should be noted that...\" → (just state it)\n- \"I'd be happy to...\" → (not relevant in PR text)\n- \"This ensures that...\" → (ground with specifics instead)\n- Marketing language: \"enterprise-ready\", \"cutting-edge\", \"best-in-class\"\n\n### Quality Checklist\n\nBefore finalizing a PR description:\n\n- [ ] No tier-1 slop words present\n- [ ] All claims grounded with specifics (numbers, files, commands)\n- [ ] Active voice used throughout\n- [ ] No formulaic openers or closers\n- [ ] Balanced structure (not all bullets)\n\n## Template Variations\n\n### Small Bug Fix\n```markdown\n## Summary\nFix null pointer exception in PDF generation when resume has no education section.\n\n## Changes\n- Add null check before accessing education fields\n- Add test case for resumes without education\n\n## Testing\n- `pytest tests/test_pdf_generation.py` - all passing\n- Verified fix with sample resume lacking education section\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\n### Feature Addition\n```markdown\n## Summary\nAdd support for exporting resumes to HTML format alongside existing PDF export.\n\n## Changes\n- **Core API**: Add `to_html()` method to Resume class\n- **Templates**: Create Jinja2 HTML templates matching PDF layouts\n- **Testing**: Add HTML generation tests and snapshot testing\n- **Documentation**: Update README with HTML export examples\n\n## Testing\n- `make test` - 52 tests passing (added 5 new tests)\n- `make lint` - no warnings\n- Manual verification: Generated HTML from 4 resume templates, verified in Chrome/Firefox\n- Snapshot tests validate HTML output consistency\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\nFile v1.9.12:modules/quality-gates.md\n\n# Quality Gates Pattern Reference\n\n## Common Quality Gate Commands by Language\n\n### Python Projects\n```bash\n# Formatting\nmake format          # or: black . && isort .\nruff format .\nuv run ruff format .\n\n# Linting\nmake lint            # or: ruff check .\nmypy .\npylint src/\n\n# Testing\nmake test            # or: pytest\npytest --cov=src --cov-report=term\nuv run pytest\n```\n\n### JavaScript/TypeScript Projects\n```bash\n# Formatting\nnpm run format       # or: prettier --write .\nyarn format\n\n# Linting\nnpm run lint         # or: eslint .\nyarn lint\n\n# Testing\nnpm test\nyarn test\njest --coverage\n```\n\n### Go Projects\n```bash\n# Formatting\ngo fmt ./...\ngofmt -w .\n\n# Linting\ngolangci-lint run\ngo vet ./...\n\n# Testing\ngo test ./...\ngo test -v -cover ./...\n```\n\n### Rust Projects\n```bash\n# Formatting\ncargo fmt\n\n# Linting\ncargo clippy -- -D warnings\n\n# Testing\ncargo test\ncargo test --all-features\n```\n\n## Failure Handling Patterns\n\n### When Quality Gates Fail\n1. **Capture the exact error output** - Don't summarize, show actual failures\n2. **Fix failures immediately** - Never proceed with failing tests\n3. **Re-run after fixes** - Confirm all gates pass before continuing\n4. **Document what was fixed** - Include in PR testing section\n\n### Common Failure Categories\n- **Formatting issues**: Auto-fix with formatter, then re-run\n- **Linting warnings**: Address or document why they're acceptable\n- **Test failures**: Fix the code or update tests as needed\n- **Type errors**: Resolve type mismatches or add proper annotations\n\n## Alternative Validation Approaches\n\n### When Local Tests Can't Run\n- **Missing dependencies**: Document what's missing and CI strategy\n- **Environment constraints**: Note platform-specific limitations\n- **Integration tests**: Explain which will run in CI only\n- **Manual verification**: Document steps taken locally instead\n\n### CI/CD Integration Notes\n```markdown\n## Testing\n- Local: `make test` - all unit tests passing\n- CI will run: integration tests, E2E tests, cross-platform builds\n- Manual verification: Tested CLI commands locally on Ubuntu 22.04\n```\n\n## Quality Gate Checklist\n- [ ] Formatting passes (no diffs after format command)\n- [ ] Linting passes (no warnings or errors)\n- [ ] All tests pass locally\n- [ ] Type checking passes (if applicable)\n- [ ] Build succeeds (if applicable)\n- [ ] Manual smoke testing completed\n\n## Special Cases\n\n### Pre-commit Hooks\nIf project has pre-commit hooks:\n```bash\npre-commit run --all-files\n```\nDocument any hooks that were run.\n\n### Multiple Test Suites\n```bash\n# Unit tests\npytest tests/unit/\n\n# Integration tests\npytest tests/integration/\n\n# E2E tests (may run in CI only)\n# Skipped locally - runs in CI environment\n```\n\n### Performance Tests\nNote if performance benchmarks exist but weren't run:\n```markdown\n## Testing\n- Unit tests: passing\n- Performance benchmarks: skipped (run in dedicated CI job)\n```\n\nFile v1.9.12:modules/todowrite-patterns.md\n\n---\nparent_skill: sanctum:shared\nname: todowrite-patterns\ndescription: TodoWrite naming conventions and patterns for sanctum skills\ncategory: patterns\ntags: [todowrite, naming, conventions]\nestimated_tokens: 150\n---\n\n# TodoWrite Patterns for Sanctum\n\n## Naming Convention\nAll sanctum skills follow a consistent pattern for TodoWrite items:\n```\n<skill-name>:<step-name>\n```\n\nThe skill name matches the frontmatter `name` field, and the step name describes the specific workflow phase.\n\n## Examples from Sanctum Skills\n\n### git-workspace-review\n```\ngit-review:repo-confirmed\ngit-review:status-overview\ngit-review:diff-stat\ngit-review:diff-details\n```\n\n### commit-messages\nCommit messages skill does not use TodoWrite as it's a single-step artifact generation workflow.\n\n### pr-prep\n```\npr-prep:workspace-reviewed\npr-prep:quality-gates\npr-prep:self-reviewed\npr-prep:changes-summarized\npr-prep:testing-documented\npr-prep:pr-drafted\npr-prep:content-verified\n```\n\n### doc-updates\n```\ndoc-updates:context-collected\ndoc-updates:targets-identified\ndoc-updates:consolidation-checked\ndoc-updates:edits-applied\ndoc-updates:guidelines-verified\ndoc-updates:accuracy-verified\ndoc-updates:preview\n```\n\n### version-updates\n```\nversion-update:context-collected\nversion-update:target-files\nversion-update:version-set\nversion-update:docs-updated\nversion-update:verification\n```\n\n## Task Deletion (Claude Code 2.1.20+)\n\nTaskUpdate now supports deleting tasks. Use deletion to clean up completed workflow items and reduce clutter in the `/tasks` view.\n\n> **2.1.21 fix**: Task IDs are no longer reused after deletion. On 2.1.20, deleting a task and creating a new one could silently reuse the same ID, leaking old state into new tasks. Upgrade to 2.1.21+ if using task deletion.\n\n### When to Delete\n- After a workflow completes successfully and all items are marked done\n- Stale items from interrupted or abandoned workflows\n- Temporary tracking items that served their purpose\n\n### When NOT to Delete\n- Items that serve as audit trails (proof-of-work items)\n- Items referenced by other active workflows\n- Items the user may want to review later\n\n### Deletion Pattern\n```\n# After workflow completion, clean up tracking items:\nTaskUpdate(id: \"pr-prep:workspace-reviewed\", delete: true)\nTaskUpdate(id: \"pr-prep:quality-gates\", delete: true)\n```\n\n### Recommended Approach\nCreate → Complete → (optionally) Delete stale items after workflow success. Keep proof-of-work and audit items intact.\n\n## Best Practices\n\n### Step Naming\n- Use present tense verbs (collected, identified, applied, verified)\n- Keep names concise (2-3 words max)\n- Make the outcome clear from the name\n- Order steps sequentially in the workflow\n\n### When to Skip TodoWrite\n- Single-step workflows (like commit-messages)\n- Quick utilities that complete in one operation\n- Read-only analysis with no discrete phases\n\n### Integration\n- Create all TodoWrite items at workflow start\n- Mark items complete immediately after finishing each step\n- Use TodoWrite as workflow documentation for users\n\nFile v1.9.12:skill-card.md\n\n## Description: <br>\nPrepares pull requests by running quality gates, drafting descriptions, and validating tests. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to prepare pull requests by reviewing workspace state, running project quality gates, documenting tests, and drafting a concise PR description. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can activate on broad git, PR, or testing requests. <br>\nMitigation: Confirm that the user intends to run a PR-preparation workflow before proceeding. <br>\nRisk: The workflow asks the agent to run local formatting, linting, and test commands. <br>\nMitigation: Review commands before execution, resolve failures before continuing, and document any checks that cannot run locally. <br>\nRisk: The workflow writes a PR description to a destination path. <br>\nMitigation: Confirm the output path is intentional before allowing the file write. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/nm-sanctum-pr-prep) <br>\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown PR description with command summaries, testing notes, and checklist items] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes the final PR description to a user-specified path and displays it for confirmation.] <br>\n\n## Skill Version(s): <br>\n1.9.12 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.3: 6 files, 10326 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (2125b), SKILL.md (6490b), _meta.json (137b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true\n```\n\n**Additive bias audit:**\n\nRun `Skill(imbue:justify)` to compute the additive bias\nscore and check Iron Law compliance. If the score is\nYELLOW or above, justify each flagged signal before\nproceeding. If RED or STOP, rethink the approach.\n\n**Manual verification:**\n\n- [ ] Read the full diff -- does every change serve the\n      stated goal?\n- [ ] No debug statements or `TODO` markers left in\n- [ ] No commented-out code blocks\n- [ ] No formatting changes mixed with logic changes\n- [ ] No fixup commits that should be squashed\n- [ ] Additive bias score is GREEN or justified YELLOW\n- [ ] Iron Law compliance: PASS (no test tampering)\n\nIf issues are found, fix them before proceeding.\n\n## Step 3: Summarize Changes (`changes-summarized`)\n\nUse the notes from the workspace review and the output of `git diff --stat origin/main...HEAD` to understand the scope. Identify key points in the diffs and group them into 2-4 paragraphs highlighting the technical changes and their rationale. Note breaking changes, migrations, or documentation updates.\n\n## Step 4: Document Testing (`testing-documented`)\n\nList each test command executed and its result. Include manual verification steps where relevant. If tests were skipped, document the reason and the mitigation plan.\n\n## Step 5: Draft the PR (`pr-drafted`)\n\nPopulate the standard template with Summary, Changes, Testing, and Checklist sections. Include issue references, screenshots, or follow-up TODO items. Template structure and examples are available in `modules/pr-template.md`.\n\n## Step 6: Verify Content Quality (`content-verified`)\n\nApply `Skill(scribe:slop-detector)` principles to the draft. Verify that the PR description avoids tier-1 slop words (delve, comprehensive, leverage, utilize, robust, seamless) and formulaic phrases like \"I'd be happy to\" or \"It should be noted.\" Ensure there is no AI attribution in the text and that all claims are grounded with evidence such as commands, numbers, or filenames. Use active voice and maintain a balanced structure with prose for context.\n\n### Vocabulary Substitutions\n\n- Replace **leverage** or **utilize** with **use**.\n- Replace **comprehensive** with **thorough** or **complete**.\n- Replace **robust** with **solid** or **reliable**.\n- Replace **facilitate** with **help** or **enable**.\n- Replace **streamline** with **simplify**.\n\n### Remediation\n\nIf the description contains slop, apply `Skill(scribe:doc-generator)` principles to ground claims with specifics, remove marketing language, and use direct statements.\n\n## Output Instructions\n\nWrite the final PR description to the specified path, then display the file path and its contents for confirmation.\n\n## Notes\n\nDo not include tool or AI attribution in the PR text. If changes are required mid-process, re-run quality gates. This skill covers preparation; pushing changes and opening the PR occurs outside this workflow.\n\n## Supporting Modules\n\n- [TodoWrite patterns](modules/todowrite-patterns.md) - naming conventions for sanctum TodoWrite items\n\n## Troubleshooting\n\nIf project-specific commands like `make` or `npm` are unavailable, verify the environment setup against the `README`. For permission errors, check write access to build directories. If a step fails without clear output, retry the command with verbose flags to inspect the logs.\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1781796023569\n}\n\nFile v1.0.3:modules/pr-template.md\n\n# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue References\nLink related issues:\n```markdown\nFixes #456\nRelated to #789\nPart of #101\n```\n\n### Migration Guide\nFor breaking changes:\n```markdown\n## Migration Guide\n**Before:**\n\\`\\`\\`python\ngenerate_pdf(resume, \"output.pdf\")\n\\`\\`\\`\n\n**After:**\n\\`\\`\\`python\nresume.to_pdf(\"output.pdf\")\n\\`\\`\\`\n```\n\n### Performance Impact\nFor performance-related changes:\n```markdown\n## Performance Impact\n- PDF generation: 2.3s → 0.8s (65% improvement)\n- Memory usage: 150MB → 45MB\n- Benchmark results: [link to benchmark output]\n```\n\n### Security Considerations\nFor security-related changes:\n```markdown\n## Security Considerations\n- Input validation added for all user-supplied paths\n- Sanitization applied to template variables\n- No secrets or credentials in code or tests\n```\n\n## Best Practices for PR Descriptions\n\n### Do's\n- Be concise but complete\n- Focus on \"why\" not just \"what\"\n- Use bullet points for scannability\n- Include actual commands and results\n- Link to relevant issues\n- Highlight breaking changes prominently\n- Use code blocks for examples\n- Group related changes together\n\n### Don'ts\n- Include AI/tool attribution\n- Copy-paste entire file diffs\n- Use vague descriptions\n- Skip testing documentation\n- Hide breaking changes in middle of list\n- Include work-in-progress notes\n- Reference internal tool commands unless relevant\n\n## Writing Quality (scribe Integration)\n\nApply `scribe:doc-generator` principles to avoid AI-sounding text:\n\n### Vocabulary to Avoid\n\n| Instead of | Use |\n|------------|-----|\n| leverage | use |\n| utilize | use |\n| comprehensive | thorough |\n| robust | solid |\n| facilitate | help |\n| streamline | simplify |\n| seamless | smooth |\n| delve | explore |\n\n### Phrase Patterns to Remove\n\n- \"In order to...\" → \"To...\"\n- \"It should be noted that...\" → (just state it)\n- \"I'd be happy to...\" → (not relevant in PR text)\n- \"This ensures that...\" → (ground with specifics instead)\n- Marketing language: \"enterprise-ready\", \"cutting-edge\", \"best-in-class\"\n\n### Quality Checklist\n\nBefore finalizing a PR description:\n\n- [ ] No tier-1 slop words present\n- [ ] All claims grounded with specifics (numbers, files, commands)\n- [ ] Active voice used throughout\n- [ ] No formulaic openers or closers\n- [ ] Balanced structure (not all bullets)\n\n## Template Variations\n\n### Small Bug Fix\n```markdown\n## Summary\nFix null pointer exception in PDF generation when resume has no education section.\n\n## Changes\n- Add null check before accessing education fields\n- Add test case for resumes without education\n\n## Testing\n- `pytest tests/test_pdf_generation.py` - all passing\n- Verified fix with sample resume lacking education section\n\n## Checklist\n- [x] Code follows project style guidelines\n- [x] Tests pass locally\n- [x] Documentation updated if needed\n- [x] Breaking changes documented (if applicable)\n```\n\n### Feature Addition\n```markdown\n## Summary\nAdd suppor\n\nArchive v1.0.2: 6 files, 10078 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), skill-card.md (2088b), SKILL.md (6086b), _meta.json (137b)\n\nArchive v1.0.1: 5 files, 9002 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), SKILL.md (6086b), _meta.json (137b)\n\nArchive v1.0.0: 5 files, 9001 bytes\n\nFiles: modules/pr-template.md (6604b), modules/quality-gates.md (2878b), modules/todowrite-patterns.md (3038b), SKILL.md (6086b), _meta.json (137b)","readmeExcerpt":"Skill: pr-prep Owner: athola Summary: Prepares pull requests by running quality gates, drafting descriptions, and validating tests Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:20:31.922Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:40:35.559Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:57:29.055Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:05:20.969Z | user Release v1.9.14 v1.9.13 | 2026-06-27","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check for formatting-only commits mixed with feature work\ngit log --oneline $(git merge-base HEAD origin/master)..HEAD | \\\n  grep -iE '(fmt|format|lint|style|whitespace)' || true"},{"language":"markdown","snippet":"## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading."},{"language":"markdown","snippet":"## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic."},{"language":"markdown","snippet":"## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first"},{"language":"markdown","snippet":"## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)"},{"language":"markdown","snippet":"## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: pr-prep\ndescription: |\n  Prepares pull requests by running quality gates, drafting descriptions, and validating tests\nversion: 1.9.8\ntriggers:\n  - git\n  - pr\n  - pull-request\n  - quality-gates\n  - testing\n  - completing a feature and ready for review\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.sanctum:shared\", \"night-market.sanctum:git-workspace-review\", \"night-market.imbue:proof-of-work\", \"night-market.imbue:justify\", \"night-market.imbue:structured-output\", \"night-market.scribe:slop-detector\", \"night-market.scribe:doc-generator\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Pull Request Preparation Workflow\n\n## Usage\n\nUse this skill to stage changes and generate a PR summary. Run `Skill(sanctum:git-workspace-review)` first to capture the repository state and diffs.\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items for these steps before starting:\n1. `pr-prep:workspace-reviewed`\n2. `pr-prep:quality-gates`\n3. `pr-prep:self-reviewed`\n4. `pr-prep:changes-summarized`\n5. `pr-prep:testing-documented`\n6. `pr-prep:pr-drafted`\n7. `pr-prep:content-verified`\n\nMark each item as complete as the section is finished.\n\n## Step 1: Review Workspace (`workspace-reviewed`)\n\nConfirm that `Skill(sanctum:git-workspace-review)` is complete. If changes were staged after the initial review, re-execute the skill to refresh the context.\n\n## Step 2: Run Quality Gates (`quality-gates`)\n\nExecute formatting, linting, and tests using project-specific commands (e.g., `make fmt`, `make lint`, `make test`). Resolve all failures before proceeding. If a task cannot be executed locally, document the reason and the alternative validation performed. Language-specific commands and failure handling are detailed in `modules/quality-gates.md`.\n\n### Capabilities Reference Sync\n\nIf any plugin files changed (plugin.json, skills, commands,\nagents, or hooks), run `make docs-sync-check` to verify\n`book/src/reference/capabilities-reference.md` is current.\nIf it reports discrepancies, run `/sync-capabilities --fix`\nor update the reference manually before proceeding.\n\n## Step 2.5: Self-Review Pass (`self-reviewed`)\n\nRead the diff as if you are a reviewer seeing it for the\nfirst time. This catches scope creep, stale debug code,\nand unclear changes before anyone else spends time on\nthem.\n\n**Automated checks:**\n\n```bash\n# Check for debug statements left in\ngit diff --cached --name-only | xargs grep -nE \\\n  '(console\\.log|print\\(|debugger|TODO|FIXME|HACK|XXX)' \\\n  2>/dev/null || true\n\n# Check for commented-out code blocks (3+ consecutive lines)\ngit diff --cached | grep -c '^+.*//.*[a-zA-Z]' || true\n\n# Check f"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-pr-prep\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750431922\n}"},{"path":"modules/pr-template.md","content":"# Pull Request Template Structure\n\n## Standard Template Sections\n\n### 1. Summary (Required)\nBrief 1-2 sentence description of what the PR accomplishes and why.\n\n**Good Examples:**\n```markdown\n## Summary\nAdd support for modular skills to reduce token usage and improve skill maintainability through progressive loading.\n```\n\n```markdown\n## Summary\nFix authentication bug causing session timeout errors by implementing proper token refresh logic.\n```\n\n**Avoid:**\n- Implementation details (save for Changes section)\n- Vague descriptions like \"various improvements\"\n- AI/tool attribution\n\n### 2. Changes (Required)\nBullet list of specific changes grouped logically, explaining both what and why.\n\n**Structure:**\n```markdown\n## Changes\n- **Category 1**: What changed and why\n  - Sub-detail if needed\n- **Category 2**: What changed and why\n- **Breaking changes**: Highlight any breaking changes first\n```\n\n**Good Examples:**\n```markdown\n## Changes\n- **API**: Add `read_yaml()` and `to_pdf()` functions for symmetric I/O pattern\n- **Session Management**: Introduce `ResumeSession` class to centralize configuration\n- **Documentation**: Update README with new API examples and migration guide\n- **Breaking**: Remove deprecated `generate_pdf()` function (use `to_pdf()` instead)\n```\n\n### 3. Testing (Required)\nList each validation step taken, with commands and results.\n\n**Format:**\n```markdown\n## Testing\n- `make test` - all 47 tests passing\n- `make lint` - no warnings\n- `pytest --cov` - 94% coverage (up from 89%)\n- Manual verification: Tested PDF generation with 3 resume templates\n- CI will run: cross-platform tests, integration tests\n```\n\n**Include:**\n- Exact commands run\n- Pass/fail status and counts\n- Coverage changes if significant\n- Manual testing performed\n- What will run in CI (if different from local)\n\n### 4. Checklist (Required)\nStandard quality checklist for all PRs.\n\n**Template:**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n```\n\n**Extended Checklist (for complex PRs):**\n```markdown\n## Checklist\n- [ ] Code follows project style guidelines\n- [ ] Tests pass locally\n- [ ] Tests added/updated for new functionality\n- [ ] Documentation updated if needed\n- [ ] Breaking changes documented (if applicable)\n- [ ] Migration guide provided (if needed)\n- [ ] Backward compatibility maintained (or breaking change justified)\n- [ ] Performance impact assessed\n- [ ] Security implications reviewed\n```\n\n## Optional Sections\n\n### Screenshots/Visual Changes\nFor UI, CLI output, or visual changes:\n```markdown\n## Screenshots\n**Before:**\n[screenshot or command output]\n\n**After:**\n[screenshot or command output]\n```\n\n### Follow-up TODOs\nFor work deferred to future PRs:\n```markdown\n## Follow-up Work\n- [ ] Add integration tests for edge cases (Issue #123)\n- [ ] Update deployment documentation\n- [ ] Performance optimization for large files\n```\n\n### Issue Referenc"},{"path":"modules/quality-gates.md","content":"# Quality Gates Pattern Reference\n\n## Common Quality Gate Commands by Language\n\n### Python Projects\n```bash\n# Formatting\nmake format          # or: black . && isort .\nruff format .\nuv run ruff format .\n\n# Linting\nmake lint            # or: ruff check .\nmypy .\npylint src/\n\n# Testing\nmake test            # or: pytest\npytest --cov=src --cov-report=term\nuv run pytest\n```\n\n### JavaScript/TypeScript Projects\n```bash\n# Formatting\nnpm run format       # or: prettier --write .\nyarn format\n\n# Linting\nnpm run lint         # or: eslint .\nyarn lint\n\n# Testing\nnpm test\nyarn test\njest --coverage\n```\n\n### Go Projects\n```bash\n# Formatting\ngo fmt ./...\ngofmt -w .\n\n# Linting\ngolangci-lint run\ngo vet ./...\n\n# Testing\ngo test ./...\ngo test -v -cover ./...\n```\n\n### Rust Projects\n```bash\n# Formatting\ncargo fmt\n\n# Linting\ncargo clippy -- -D warnings\n\n# Testing\ncargo test\ncargo test --all-features\n```\n\n## Failure Handling Patterns\n\n### When Quality Gates Fail\n1. **Capture the exact error output** - Don't summarize, show actual failures\n2. **Fix failures immediately** - Never proceed with failing tests\n3. **Re-run after fixes** - Confirm all gates pass before continuing\n4. **Document what was fixed** - Include in PR testing section\n\n### Common Failure Categories\n- **Formatting issues**: Auto-fix with formatter, then re-run\n- **Linting warnings**: Address or document why they're acceptable\n- **Test failures**: Fix the code or update tests as needed\n- **Type errors**: Resolve type mismatches or add proper annotations\n\n## Alternative Validation Approaches\n\n### When Local Tests Can't Run\n- **Missing dependencies**: Document what's missing and CI strategy\n- **Environment constraints**: Note platform-specific limitations\n- **Integration tests**: Explain which will run in CI only\n- **Manual verification**: Document steps taken locally instead\n\n### CI/CD Integration Notes\n```markdown\n## Testing\n- Local: `make test` - all unit tests passing\n- CI will run: integration tests, E2E tests, cross-platform builds\n- Manual verification: Tested CLI commands locally on Ubuntu 22.04\n```\n\n## Quality Gate Checklist\n- [ ] Formatting passes (no diffs after format command)\n- [ ] Linting passes (no warnings or errors)\n- [ ] All tests pass locally\n- [ ] Type checking passes (if applicable)\n- [ ] Build succeeds (if applicable)\n- [ ] Manual smoke testing completed\n\n## Special Cases\n\n### Pre-commit Hooks\nIf project has pre-commit hooks:\n```bash\npre-commit run --all-files\n```\nDocument any hooks that were run.\n\n### Multiple Test Suites\n```bash\n# Unit tests\npytest tests/unit/\n\n# Integration tests\npytest tests/integration/\n\n# E2E tests (may run in CI only)\n# Skipped locally - runs in CI environment\n```\n\n### Performance Tests\nNote if performance benchmarks exist but weren't run:\n```markdown\n## Testing\n- Unit tests: passing\n- Performance benchmarks: skipped (run in dedicated CI job)\n```"},{"path":"modules/todowrite-patterns.md","content":"---\nparent_skill: sanctum:shared\nname: todowrite-patterns\ndescription: TodoWrite naming conventions and patterns for sanctum skills\ncategory: patterns\ntags: [todowrite, naming, conventions]\nestimated_tokens: 150\n---\n\n# TodoWrite Patterns for Sanctum\n\n## Naming Convention\nAll sanctum skills follow a consistent pattern for TodoWrite items:\n```\n<skill-name>:<step-name>\n```\n\nThe skill name matches the frontmatter `name` field, and the step name describes the specific workflow phase.\n\n## Examples from Sanctum Skills\n\n### git-workspace-review\n```\ngit-review:repo-confirmed\ngit-review:status-overview\ngit-review:diff-stat\ngit-review:diff-details\n```\n\n### commit-messages\nCommit messages skill does not use TodoWrite as it's a single-step artifact generation workflow.\n\n### pr-prep\n```\npr-prep:workspace-reviewed\npr-prep:quality-gates\npr-prep:self-reviewed\npr-prep:changes-summarized\npr-prep:testing-documented\npr-prep:pr-drafted\npr-prep:content-verified\n```\n\n### doc-updates\n```\ndoc-updates:context-collected\ndoc-updates:targets-identified\ndoc-updates:consolidation-checked\ndoc-updates:edits-applied\ndoc-updates:guidelines-verified\ndoc-updates:accuracy-verified\ndoc-updates:preview\n```\n\n### version-updates\n```\nversion-update:context-collected\nversion-update:target-files\nversion-update:version-set\nversion-update:docs-updated\nversion-update:verification\n```\n\n## Task Deletion (Claude Code 2.1.20+)\n\nTaskUpdate now supports deleting tasks. Use deletion to clean up completed workflow items and reduce clutter in the `/tasks` view.\n\n> **2.1.21 fix**: Task IDs are no longer reused after deletion. On 2.1.20, deleting a task and creating a new one could silently reuse the same ID, leaking old state into new tasks. Upgrade to 2.1.21+ if using task deletion.\n\n### When to Delete\n- After a workflow completes successfully and all items are marked done\n- Stale items from interrupted or abandoned workflows\n- Temporary tracking items that served their purpose\n\n### When NOT to Delete\n- Items that serve as audit trails (proof-of-work items)\n- Items referenced by other active workflows\n- Items the user may want to review later\n\n### Deletion Pattern\n```\n# After workflow completion, clean up tracking items:\nTaskUpdate(id: \"pr-prep:workspace-reviewed\", delete: true)\nTaskUpdate(id: \"pr-prep:quality-gates\", delete: true)\n```\n\n### Recommended Approach\nCreate → Complete → (optionally) Delete stale items after workflow success. Keep proof-of-work and audit items intact.\n\n## Best Practices\n\n### Step Naming\n- Use present tense verbs (collected, identified, applied, verified)\n- Keep names concise (2-3 words max)\n- Make the outcome clear from the name\n- Order steps sequentially in the workflow\n\n### When to Skip TodoWrite\n- Single-step workflows (like commit-messages)\n- Quick utilities that complete in one operation\n- Read-only analysis with no discrete phases\n\n### Integration\n- Create all TodoWrite items at workflow start\n- Mark items complete immediately after finishing each step\n- Use TodoWrite as"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Prepares pull requests by running quality gates, drafting descriptions, and validating tests Skill: pr-prep Owner: athola Summary: Prepares pull requests by running quality gates, drafting descriptions, and validating tests Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:20:31.922Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:40:35.559Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:57:29.055Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:05:20.969Z | user Release v1.9.14 v1.9.13 | 2026-06-27","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1389,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T08:20:51.185Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T08:20:51.185Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:48:43.650Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}