This repository is used for daily AIPM project operations.
[PM](case-insensitive:[pm],[Pm], etc.) activates issue-driven lifecycle (see below).[AIPM-MAJOR]ormajor/request instructionare aliases for[PM].[AIPM-CHECK] #<issue-number>for status confirmation.
Without [PM]: execute directly, no issue tracking.
- Create or identify a GitHub issue.
- Assign labels using the label taxonomy in
docs/aipm-issue-workflow.md. - Auto-manage lifecycle logs per phase (issue-log calls are mandatory).
- Record PRD, execution plan, and result as issue comments.
- Include an issue key in all related commits and PR titles.
- Format:
AIPM-<issue-number> - Example:
AIPM-12
- Format:
<type>/<PREFIX>-<n>-<slug> - Example:
feat/AIPM-17-governance-improvements,fix/AIPM-5-monitoring-alert
- Subject format:
[AIPM-<n>] <type>(<scope>): <summary> - Scope is optional:
[AIPM-<n>] <type>: <summary>also valid Refs #<n>for linked workCloses #<n>for completion commit
START: scope, assumptions, done criteriaPLAN/PRD: requirements, execution planPROGRESS: what changed, blockers, next stepRESULT: outcome, verification, linked commit/PR
- Label bootstrap:
./scripts/setup-labels.sh - Log comment:
./scripts/issue-log.sh <issue> <start|progress|end|prd|plan|result> [body-file] [--close]
When a prompt contains [PM] (case-insensitive), enable issue-driven lifecycle automation.
Without [PM], execute directly without issue tracking.
[pm] <work description> starts the lifecycle automatically. (no milestone/release creation)
- Create issue via
pm-start - Record required logs:
issue-log start/plan/progress(placeholder bodies are not allowed) - Create default branch/worktree (
<type>/<PREFIX>-<n>-<slug>)
[pm] done or [pm] close runs explicit closeout.
- Prepare result/retrospective document and update related docs
- Verify linked PR is merged (required by default)
- Run
pm-close(modernization guard +issue-log result --close)
[pm] alone runs sync checks for the current lifecycle state.
- If an active issue exists: run progress/sync checks
- If no active issue exists: run status/sync checks only (no new issue creation)
[pm] release [patch|minor|major] runs standard tag/release automation (default: patch).
- Compute latest version + bump (
patch/minor/major) - Ensure matching milestone exists (create when missing)
- Create/push tag
- Generate release notes from the standard template
- Run
gh release create/edit - Assign release-range issues to the matching milestone
- Verify release version == milestone version (1:1) + assignment parity
- Optionally backfill historical releases (
./scripts/pm-release.sh --backfill-all)
[pm] done or [pm] close explicitly triggers MODE 2.
| Condition | Mode |
|---|---|
[pm] <description> + no active issue |
MODE 1 (START) |
[pm] release [patch|minor|major] |
MODE 3 (RELEASE) |
[pm] done / [pm] close |
MODE 2 (CLOSEOUT) |
[pm] alone + active issue exists |
SYNC CHECKPOINT |
[pm] alone + no active issue |
status/sync check |
[pm] <title>→./scripts/pm-start.sh --title "<title>"[pm]→ active-issue progress/sync checkpoint (./scripts/pm-sync.shfor manual audit)[pm] done|close→./scripts/pm-close.sh <issue> <result-file>(defaults: merged PR + worktree cleanup required)[pm] release [patch|minor|major]→./scripts/pm-release.sh [patch|minor|major]
[PM]issue creation must use./scripts/issue-create.sh.- Forbidden: passing bare labels (
feature,epic,story,task,bug,chore,docs,refactor) directly via--label. - Standard label taxonomy:
type:*,status:*,priority:*,area:*,agent:*. - Defaults:
type:taskwhen type is omitted,status:todowhen status is omitted. - Multi-line bodies should use
--body-fileby default (AIPM_ISSUE_BODY_MODE=filein.aipm/ops.env).
| Title Prefix | Canonical Label |
|---|---|
[Epic] |
type:epic |
[Feature] |
type:feature |
[Story] |
type:story |
[Task] |
type:task |
[Bug] |
type:bug |
[Chore] |
type:chore |
[Docs] |
type:docs |
[Refactor] |
type:refactor |
[PRD] |
type:prd |
[Plan] |
type:plan |
[Result] |
type:result |
- Release notes must include these fixed sections:
## Highlights## Changed by Type(Added/Changed/Fixed/Removed/Deprecated/Security)## Compatibility## Validation## Links
- Inferred statements for historical backfills must be marked explicitly.
- Parity scope is SemVer only (
vX.Y.Z). - Release version and milestone version must be 1:1.
- Any milestone with a release must have at least one assigned issue.
- Track progress through issue assignments (do not encode issue numbers in milestone description).
- Automation commands:
./scripts/pm-release.sh(default patch),./scripts/pm-release.sh patch|minor|major.
[AIPM-CHECK] #<issue-number> reports current state, progress summary, and next action.
- Subject:
[AIPMOPS-<n>] <type>(<scope>): <summary> - Body:
Refs #<n>orCloses #<n>orFixes #<n>
./scripts/setup-labels.sh./scripts/issue-create.sh --title "[Task] ..." --body "..."./scripts/pm-start.sh --title "[Task] ..." --start-file docs/start.md --plan-file docs/plan.md --progress-file docs/progress.md./scripts/issue-log.sh <issue> start./scripts/issue-log.sh <issue> plan./scripts/issue-log.sh <issue> progress./scripts/pm-sync.sh./scripts/pm-modernize.sh --issue <issue> --result-file docs/result.md./scripts/pm-close.sh <issue> docs/result.md./scripts/check-pm-integrity.sh --state open --strict./scripts/pm-release.sh./scripts/pm-release.sh patch|minor|major./scripts/pm-release.sh --backfill-all --bootstrap-if-missing./scripts/check-release-milestone-parity.sh --strict
When a prompt contains [research] (case-insensitive), enable research automation.
Without [research], handle it as normal conversation.
[research] mode can optionally integrate issue/label/git operations.
[research] <URL1>, <URL2>, ... or [research] <URL1> <URL2> ...
- Detect URLs
- Collect in parallel via sub-agents (4-step fallback)
- Summarize each source
- Produce cross-source insights
- Save
research/yyyymmdd-daily-<slug>.md
[research] youtube <topics> or [research] youtube <YouTube links>
- Auto-classify inputs (URL = link, non-URL = topic)
- Topic mode: search YouTube Top 5 per topic and backfill with transcript-success videos to keep Top 5
- Link mode: preserve original input links and record transcript failure reasons (no automatic replacement)
- Save
research/yyyymmdd-youtube-<slug>.mdand create artifacts underresearch/youtube/YYYY-MM-DD/<slug>/
[research] spike <topic> performs web-search-based background research and creates a spike template document.
-> Saves research/yyyymmdd-spike-<slug>.md
[research] done summarizes and saves the conversation as a research document.
- WebFetch → 2.
curl -sL -A '<browser-UA>'→ 3. Playwright MCP (mcp__playwright) → 4. WebSearch Automatically advances to the next step on failure. Final WebSearch collects search snippets.
- Daily:
research/yyyymmdd-daily-<topic-slug>.md - YouTube:
research/yyyymmdd-youtube-<slug>.md - Spike:
research/yyyymmdd-spike-<topic-slug>.md - NotebookLM:
research/yyyymmdd-nlm-<slug>.md
For [research] outputs, you can run these together:
- Apply the
researchlabel to an issue - Add the research document link as an issue comment
- Commit research artifacts (and push when needed)
/research— run research via slash command./scripts/research-log.sh daily <slug>— create a daily research file./scripts/research-log.sh youtube <slug> --youtube-input "<topic or youtube-url>"— create a YouTube research file./scripts/research-log.sh spike <slug>— create a spike research file./scripts/research-log.sh daily <slug> --issue <n> --push— run[research]with issue/git integration./scripts/research-log.sh daily <slug> --create-issue --issue-title "AI Agent Routing" --push— auto-create an issue and integrate