product-boot
Overview
One of the five class boots surfaced by team-boot's Class Boots
catalog. team-boot injects the always-relevant team context (constitution,
CDR index, skills registry) at session start; this skill loads the
product decision layer on demand — the Accepted PDR index from project
memory — and pairs it with a capture suggestion so new product choices are
routed to /product-specify rather than evaporating. The boot never writes
files: it suggests the capture skill, and the user runs it.
Reading decisions and recording decisions are one loop: existing PDRs inform the work; decisions made during the work flow back into the same record system through the capture skill.
When to Use
Invoke at the START of a matching task — before planning the todo list and before implementation — so the PDR context informs planning. Never defer to session end.
Invoke when:
- Starting product work (PRD generation, feature definition, roadmap planning, GTM decisions).
- The session turns product-shaped mid-flight: feature scope, persona definition, monetization, pricing, or target-market choices emerge.
- Reviewing an existing product's decision backdrop (
/product-analyze,/product-roadmapbenefit from the loaded index).
Core Process
Step 1: Locate the PDR Index
From the current working directory (do NOT walk up parent directories):
- Primary:
docs/adlc/memory/pdr/pdr.md(generated by/product-implement; rows start with| PDR) - Fallback:
.adlc/memory/pdr/pdr.md(legacy layout, legacy)
If neither exists but docs/adlc/memory/pdr/PDR-*.md or legacy
.adlc/memory/pdr/PDR-*.md files do, synthesize a
lean table from each file (ID from filename; Feature-Area/Status/Title
from frontmatter or first heading). If the directory is empty or absent,
report 0 PDRs — never fabricate rows.
When no local memory index exists in the current working directory and the
directory sits inside a workspace (detected via a .gitmodules marker in an
ancestor), read the workspace root's docs/adlc/memory/ index instead
(the dual-read order applies: docs/adlc/memory first, legacy
.adlc/memory fallback).
Step 1b: Read the PDR Drafts Index
Check .adlc/drafts/pdr/ for PDR-*.md files with status: proposed in
frontmatter. These are draft PDRs pending clarification. Collect ID /
Title / Type / Status / Date from each file. If the directory is empty or
absent, report 0 pending drafts.
Absent Context
If team-boot injected no team context this session (no Team Context & Decisions section in the first user message — unconfigured project or hook failure): say so in one line, emit the section heading with a 0 PDRs matched (no team context injected — run /team-setup) source line, and continue the task on the directly-read PDR index. Never treat a missing injection as an empty record set. Recovery: run /team-diagnose.
Step 2: Inject PDR Context (Output Contract)
Emit before the task answer:
## PDR Context
| ID | Feature-Area | Status | Title |
|--|--|--|--|
| AI triage | triage | Accepted | AI triage scoring |
_Searched N PDRs, K matched._
## Drafts Pending Review
| ID | Title | Type | Status | Date |
|----|-------|------|--------|------|
| (from .adlc/drafts/pdr/) |
_N pending drafts — run /product-clarify to review._
- Render ID / Feature-Area / Status / Title from the index (the full index
also carries Category, Date, Owner — read the individual
PDR-*.mdwhen a task matches a row). N= total index rows;K= rows relevant to the current task. K MUST equal the table rows shown. 0 rows matched → emit the section heading + the_Searched N PDRs, K matched._line only — no table. A 0-row table header collapses into unrendered single-line markdown; never emit one. Emit the section as markdown blocks — heading, table rows, and counts line each on their own lines.
Step 3: Suggest Product Decision Capture
| Trigger | Action |
|---|---|
| Feature scope change, in/out decisions | PDR → suggest /product-specify |
| Persona definition or revision | PDR → suggest /product-specify |
| Monetization, pricing, target-market choice | PDR → suggest /product-specify |
| PDR-class decision already in the ledger | verify the suggestion was surfaced; if not, re-surface |
Emit one line per detected decision, in the visible response:
_Suggested capture: <decision name> → run /product-specify._
Never write a draft (or any file) yourself — /product-specify writes the
.adlc/drafts/pdr/ draft when the user runs it, and /product-clarify
gates it afterwards.
Add/refresh rows in Team Context & Decisions (ID | Name | Type | Rel |
Status | Clarify) for every PDR-class decision detected this session —
including ones from before this boot was invoked. Mirror each decision as a
task-list todo (suggest /product-specify → matching clarify skill at
session end for drafts that exist); after
code-modifying tasks, add a trailing todo to sweep Team Context & Decisions until
Unrecorded: 0 pending · Unclarified: 0 drafts (a draft leaves Unclarified
only via its clarify skill or an explicit user handoff to a named clarify or execute skill). At session end,
deliver the clarify prompt naming each uncaptured decision (ID + capture skill)
and each captured PDR draft in .adlc/drafts/pdr/ (ID + clarify skill); if the
user defers clarify, mark those rows handed off.
Failure Handling
- Missing index + missing records → emit the section heading +
_Searched 0 PDRs, 0 matched._only — no table — and continue the user's task; never block. - Unparseable index rows → skip malformed rows, note the skip count.
Red Flags
- Fabricating PDR rows or inflating K beyond the table shown.
- Injecting the index but ignoring the capture suggestion — the pairing is the point.
- Writing a draft (or any file) yourself — the boot only suggests;
/product-specifywrites. - Walking up parent directories to find
.adlc/.
Verification
- PDR Context table emitted with
_Searched N PDRs, K matched._(K = table rows). - Detected PDR-class decisions added as Team Context & Decisions rows.
- No files written; each detected PDR-class decision carries a
_Suggested capture: … → run /product-specify._line.
