A MyThingsLab My[X] tool. It keeps the fleet's GitHub
Project board — and any linked org-wide tracking issue — synced to the live
state of every repo, so the dashboard never silently drifts from reality.
Pure bookkeeping: MyProjector makes no priority judgments (that's
MyOrchestrator's and MyPlanner's job). It only reconciles what already
happened — merged/closed PRs and issues — into the board's Fleet Status
field and a tracking issue's checklist.
- Lists every repo under the
MyThingsLaborg. - For each repo, counts open PRs/issues and collects merge/close events since
the last
kind=project-syncledger entry (the bookmark window). - Reads the Project board's items and field values (via the new
mythings.projectsGraphQL contract). - Computes a mechanical
Fleet Statustransition —0 open → Shipped,≥1 open → In Progress— never overriding a human-setBlocked/Design Onlywithout--force. - Flags drift (a card whose linked content type changed unexpectedly) instead of silently fixing it.
- Optionally rewrites each changed card's
Last step/Next stepprose (the single Engine call; deterministic template underNoopEngine). - With
--apply-checklist, checks off a linked tracking issue's checklist lines that name a now-merged/closedrepo#number.
| Side effect | Action.kind |
Default |
|---|---|---|
| Board field value edit (private board) | project-field-edit |
ALLOW |
| Tracking-issue checklist edit (public) | tracking-issue-edit |
ASK |
| Closing a public issue | issue-close |
ASK |
myprojector sync --project-number 1 [--repos owner/a,owner/b] [--dry-run] [--json]
myprojector sync --project-number 1 --apply-checklist \
--tracking-repo MyThingsLab/my-things-core --tracking-issue 1python -m venv .venv && source .venv/bin/activate
pip install -e ../my-things-core -e ".[dev]"
pytestMIT — see LICENSE.