name: 308-sf-status description: "Report cross-project git status, sync state, and issues." disable-model-invocation: true argument-hint: [optional: all | issues | dirty]
Canonical Paths
Before resolving any ShipFlow-owned file, load $SHIPFLOW_ROOT/skills/references/canonical-paths.md ($SHIPFLOW_ROOT defaults to $HOME/shipflow). ShipFlow tools, shared references, skill-local references/*, templates, workflow docs, and internal scripts must resolve from $SHIPFLOW_ROOT, not from the project repo where the skill is running. Project artifacts and source files still resolve from the current project root unless explicitly stated otherwise.
Chantier Tracking
Trace category: non-applicable.
Process role: helper.
This skill does not write to chantier specs. If invoked inside a spec-first flow, do not modify Skill Run History; include Chantier: non applicable or Chantier: non trace in the final report when useful, with the reason and the next lifecycle command if one is obvious.
Report Modes
Before producing the final report, load $SHIPFLOW_ROOT/skills/references/reporting-contract.md.
Default to report=user: concise dashboard, attention items, limits, and Chantier: non applicable only when useful. Use report=agent when another skill needs the full project matrix, skipped paths, and command evidence.
Required References
- Load
$SHIPFLOW_ROOT/skills/references/question-contract.mdbefore asking for dashboard view mode.
Mission
Report cross-project git status, sync state, and attention items without mutating project governance.
Context
- Current directory: !
pwd - Derived project registry (primary):
find-style scan of workspace roots for directories containingshipflow_data/(project-local governance roots). Legacy fallback:cat local project discovery (shipflow_data/markers)(legacy mode only).
Flow
Step 0: Choose view mode
If $ARGUMENTS is empty, load $SHIPFLOW_ROOT/skills/references/question-contract.md, then ask:
- Question: "Quelle vue du dashboard veux-tu ?"
multiSelect: false- Options:
- Issues only (recommandé) — "Affiche seulement les projets avec attention requise"
- Dirty only — "Affiche seulement les projets avec changements locaux"
- All projects — "Affiche tout le portefeuille"
If $ARGUMENTS is provided, map:
issues-> issues onlydirty-> dirty only- any other value -> all projects
Step 1: Read project registry
Derive project paths by scanning workspace roots and project-local markers (shipflow_data/), then include ShipFlow itself (${SHIPFLOW_ROOT:-$HOME/shipflow}). Use local project discovery (shipflow_data/ markers) only as legacy compatibility fallback when local discovery is unavailable.
308-sf-status must not read the external registry as project governance truth. It is a dashboard input only; per-project governance remains under each project's local shipflow_data/{business,technical,editorial,workflow} corpus and is not mutated here.
Step 2: Gather git status for each project
Before running git commands, normalize registry paths:
- If the registry path starts with
~/, expand it against the current$HOME. - If the registry path starts with
$HOME/, expand it against the current$HOME. - If the registry path starts with
/home/<other-user>/and that path does not exist, retry with the same suffix under the current$HOME. - If neither the original path nor the normalized fallback exists, skip the project.
For each project path, run these git commands (skip if path doesn't exist or isn't a git repo):
git -C [path] rev-parse --abbrev-ref HEAD 2>/dev/null # Current branch
git -C [path] status --porcelain 2>/dev/null | wc -l # Uncommitted changes count
git -C [path] rev-list --count @{upstream}..HEAD 2>/dev/null # Commits ahead
git -C [path] rev-list --count HEAD..@{upstream} 2>/dev/null # Commits behind
git -C [path] log -1 --format="%ar — %s" 2>/dev/null # Last commit
git -C [path] stash list 2>/dev/null | wc -l # Stashed changes
Run all projects in parallel using available parallel agent/tooling when present, or sequentially with Bash if fast enough (<10s total).
Step 3: Compile dashboard
══════════════════════════════════════════════════════════════════════
GIT STATUS DASHBOARD — [date]
══════════════════════════════════════════════════════════════════════
| Project | Branch | Uncommitted | Ahead | Behind | Last Commit |
|------------------|----------|-------------|-------|--------|-----------------------|
| my-robots | main | 0 | 0 | 0 | 2d ago — Add SEO crew |
| tubeflow | feat/ui | 3 | 2 | 0 | 1h ago — Fix layout |
| GoCharbon | main | 0 | 0 | 5 | 3d ago — New post |
| ... | | | | | |
| ShipFlow | main | 1 | 1 | 0 | 10m ago — Update tasks|
──────────────────────────────────────────────────────────────────────
Apply selected filter before rendering:
- issues only: show projects with uncommitted, ahead/behind, no remote, detached HEAD, or stash > 0
- dirty only: show projects with uncommitted > 0
- all projects: show all valid repos
Step 4: Highlight issues
NEEDS ATTENTION
⚠️ tubeflow — 3 uncommitted changes on feat/ui
⚠️ GoCharbon — 5 commits behind remote
⚠️ ShipFlow — 1 uncommitted change (TASKS.md?)
QUICK ACTIONS
→ tubeflow: /005-sf-ship to commit and push
→ GoCharbon: git -C $HOME/GoCharbon pull
Only show NEEDS ATTENTION if there are issues. Issues to flag:
- Uncommitted changes (>0)
- Behind remote (>0)
- Ahead of remote (>0, may need push)
- Detached HEAD
- No remote configured
- Stashed changes (>0)
Important
- READ-ONLY — never modify any files or run git commands that change state.
local project discovery (shipflow_data/markers)is legacy-only read-only input here; do not treat it as active truth.- Do not update project-local
shipflow_data/workflow/TASKS.mdor any legacy control-plane trackers from308-sf-status; route follow-up work to309-sf-tasks,701-sf-backlog,702-sf-priorities,703-sf-review, or005-sf-ship. - Prefer storing home-scoped project paths as
~/...in local project metadata for portability across usernames and servers. - Include ShipFlow repo itself in the dashboard.
- Skip projects whose paths don't exist on disk.
- Skip SocialFlowz if it has no git repo.
- Target execution time: under 10 seconds total.
- If a project has no remote tracking branch, show "no remote" instead of ahead/behind counts.