Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .cursor/skills/initiative-sync.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

# /initiative-sync — Board ↔ initiatives.json

Reconcile GitHub Project boards with `.cursor/state/initiatives.json` and tap-agent portfolio briefs.

## Usage

```bash
./bin/initiative-sync.sh status # all projects with boards
./bin/initiative-sync.sh status --project qulib
./bin/initiative-sync.sh pull qulib --apply # board → initiatives.json
./bin/initiative-sync.sh plan notquality # briefs missing from board
```

## What it checks

| Source | Role |
|--------|------|
| **GitHub Project board** | Card column (`Proposal`, `Todo`, `Plans`, …) and issue/PR link |
| **initiatives.json** | Agent session state (phases, metrics, checkpoints) |
| **portfolio/initiatives/*.md** | Planned briefs in tap-agent (flags when board has no card) |

## When to run

- Session start (Conductor checklist) — after `gh project item-list`, run `status`
- After `/approve` or manual board moves — `pull <project> --apply`
- When portfolio brief exists but no card — `plan <project>` then create issue + board item

## Rules

- **Pull** updates `board_status`, `github`, and `status` from the board; it does **not** delete local-only initiatives
- **Never** modifies another project's files when run from the wrong cwd — paths come from `scripts/project_registry.py` or `~/.tapagent/portfolio.json`
- Board titles must start with an initiative id (`QLIB-001`, `NQ-001`, …) to auto-link

## Related

- ORCH-013 proposal engine (creates `proposal` issues on board)
- [product-conductor.md](../rules/product-conductor.md) — board column lifecycle
2 changes: 2 additions & 0 deletions .cursor/skills/portfolio.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ PORTFOLIO (5 projects, 3 active)

Reads `~/.tapagent/portfolio.json` and each project's `initiatives.json`.

Board drift: run `./bin/initiative-sync.sh status` (see [initiative-sync.md](./initiative-sync.md)).

## Rules

- Cross-project reads only — never modify another project's state files
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The
- **Autonomous proposal engine (ORCH-013).** GitHub Actions workflow (weekly + on-demand) calls Claude with prompt caching to generate 3–5 initiative proposals per project (qulib, notquality). Posts digest to `#proposals` Slack, creates issues tagged `proposal` on each repo's project board with Proposal status. Human-in-the-loop review via `/refine <feedback>` and `/approve` issue comments. Includes `proposal_engine.py`, `proposal_refine.py`, `proposal_approve.py` and matching workflow files.
- **Agent rename pass (ORCH-012).** Composer → Builder, Supervisor → Guardian (Cursor agent), Reporter → Inspector; `docs/agent-naming.md` disambiguates Builder vs Orchestrator and Guardian agent vs gates; Planner kept for context isolation.
- **Conductor single entry point (ORCH-011).** Documented and ruled that Conductor is the only user-facing Cursor agent; explicit dispatch to Composer, Supervisor, or Reporter via Communicator META handoffs.
- **Initiative board sync.** `bin/initiative-sync.sh` compares GitHub Project boards with per-project `initiatives.json` and tap-agent portfolio briefs; `pull --apply` imports board cards (status, issue links). `/initiative-sync` skill and `scripts/project_registry.py` shared project paths.

---

Expand Down
17 changes: 17 additions & 0 deletions bin/initiative-sync.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Sync GitHub Project boards with per-project .cursor/state/initiatives.json
#
# Usage:
# ./bin/initiative-sync.sh status [--project qulib|notquality|all]
# ./bin/initiative-sync.sh pull <project> [--apply]
# ./bin/initiative-sync.sh plan <project>
#
# Requires: gh CLI (authenticated). Optional: ~/.tapagent/portfolio.json for paths.

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ROOT="$(dirname "$SCRIPT_DIR")"

cd "$ROOT/scripts"
exec python3 initiative_sync.py "$@"
Loading