--- name: deferred-capture description: >- Contract for unified deferred-item capture across plugins. Defines CLI interface, issue template, label taxonomy, and compliance test. version: 1.9.3 alwaysApply: false model_hint: standard --- # Deferred Capture Contract ## When To Use - Building a new plugin deferred-capture wrapper - Validating an existing wrapper against the contract - Adding new source labels or template fields ## When NOT To Use - Capturing a deferred item at runtime (use the plugin wrapper directly, e.g. `scripts/deferred_capture.py`) - Creating GitHub issues manually Specification that all plugin deferred-capture wrappers implement. Not a runtime dependency -- a convention. ## CLI Interface Required arguments: - `--title` (str): Concise description. Becomes issue title after `[Deferred]` prefix - `--source` (str): Origin skill. One of: war-room, brainstorm, scope-guard, feature-review, review, regression, egregore - `--context` (str): Why raised and why deferred Optional arguments: - `--labels` (str): Comma-separated additional labels beyond `deferred` + source - `--session-id` (str): Session ID. Canonical source: `$CLAUDE_SESSION_ID` env var, fallback: UTC timestamp `YYYYMMDD-HHMMSS` - `--artifact-path` (str): Absolute path or `$HOME`-based path to source artifact - `--captured-by` (str): `explicit` (default) or `safety-net` - `--dry-run` (flag): Print JSON output without creating issue ## Issue Template Title: `[Deferred] ` Labels: `deferred` + `<source>` Body: ## Deferred Item **Source:** <source> (session <session-id>) **Captured:** <YYYY-MM-DD> **Branch:** <current git branch> **Captured by:** <explicit|safety-net> ### Context <context argument verbatim> ### Original Artifact <artifact-path if provided, otherwise "N/A"> ### Next Steps - [ ] Evaluate feasibility in a future cycle - [ ] Link to related work if applicable ## Label Taxonomy | Label | Color | Purpose | |-------|-------|---------| | `deferred` | `#7B61FF` | Universal query handle | | `war-room` | `#B60205` | Source: war-room deliberation | | `brainstorm` | `#1D76DB` | Source: brainstorming session | | `scope-guard` | `#FBCA04` | Source: scope-guard deferral | | `feature-review` | `#F9A825` | Source: feature-review | | `review` | `#0E8A16` | Source: code/PR review | | `regression` | `#D73A4A` | Source: skill regression | | `egregore` | `#5319E7` | Source: autonomous agent | ## Duplicate Detection Search: `gh issue list --search "<title> in:title" --state open --json number,title` Compare: exact title match after stripping `[Deferred]` prefix and normalizing to lowercase. Only open issues are checked. Re-filing a closed deferred item is intentional. ## Output (JSON to stdout) Created: `{"status": "created", "issue_url": "...", "number": 42}` Duplicate: `{"status": "duplicate", "existing_url": "...", "number": 17}` Error: `{"status": "error", "message": "..."}` ## Compliance Test Any wrapper can verify conformance with: python3 scripts/deferred_capture.py \ --title "Test: compliance check" \ --source test \ --context "Automated compliance verification" \ --dry-run Must output valid JSON with a `status` field.