---
name: fluent-feature-status
description: Dashboard view of all features and their lifecycle status. Scans accounts/<PROFILE>/features/*/status.json and presents a consolidated table with filtering, sorting, and workspace tree view. Triggers on "feature status", "show features", "what features", "feature dashboard", "where am I", "what's in progress".
user-invocable: true
allowed-tools: Bash, Read, Glob, Grep
argument-hint: [--profile PROFILE] [--filter STATUS] [--format table|json] [--tree]
cursor-tier: auto
---

# Feature Status Dashboard

Scan all feature directories for a profile and present a unified dashboard showing lifecycle status, next actions, and workspace health. This is the "where am I?" view that answers "what features exist, what state are they in, and what should I do next?"

## Ownership Boundary

This skill owns: feature status aggregation, dashboard rendering, workspace tree view, resume recommendations.

Other skills own: individual feature lifecycle transitions (`/fluent-use-case-discover`, `/fluent-feature-plan`, `/fluent-build`, `/fluent-module-deploy`, `/fluent-e2e-test`), session audit trail (`/fluent-session`).

## When to Use

- **Session start** — see where you left off across all features
- **After completing a major step** — verify status updated correctly
- **Managing multiple features** — get the big picture at a glance
- **Before archival** — identify features ready to archive (VERIFIED status)
- **Onboarding to a workspace** — understand what's been built
- **Progress check** — during multi-feature work, see the full picture

## No Planning Gate

This is a **read-only** diagnostic skill. No planning gate required. It can be invoked at any time without approval, writes no files, and makes no mutations.

## Inputs

| Parameter | Required | Default | Description |
|-----------|----------|---------|-------------|
| `--profile` | No | Active CLI profile (or all profiles) | Fluent CLI profile to scan |
| `--filter` | No | (all statuses) | Filter by status: `DISCOVERY`, `PLANNING`, `APPROVED`, `IN_PROGRESS`, `BUILT`, `DEPLOYED`, `VERIFIED` |
| `--format` | No | `table` | Output format: `table` (human-readable) or `json` (machine-readable) |
| `--tree` | No | `false` | Also show workspace directory tree with artifact counts |

## Execution Flow

```
1. RESOLVE profile
   - From --profile arg, or active Fluent CLI profile, or scan all profiles
   - Validate accounts/<PROFILE>/ directory exists

2. SCAN feature directories
   - Glob: accounts/<PROFILE>/features/*/status.json
   - If no --profile: accounts/*/features/*/status.json
   - If no features/ directory -> report "No features found" with guidance

3. PARSE each status.json
   - Validate $schema = "feature-status-v2" (accept "feature-status-v1" for backward compat)
   - Extract all fields: feature, retailers (or retailer), status, spec, plan,
     planRevision, architecture, preview, build, deploy, test, basedOn, next, updated
   - Extract optional phase fields: currentPhase, totalPhases, phasesApproved (default to null if absent)
   - Extract optional provenance object: `provenance.spec`, `provenance.plan`, `provenance.build`, etc.
     Each provenance entry has: `skill` (string), `mode` (string, optional), `timestamp` (ISO-8601)
   - Gate fields default to null if absent (backward compat)
   - Provenance fields default to null if absent (backward compat — older features won't have them)
   - On parse error -> add to warnings list, include with status PARSE_ERROR

4. SORT features
   - Primary: status priority (IN_PROGRESS > BUILT > DEPLOYED > APPROVED > PLANNING > DISCOVERY > VERIFIED)
   - Secondary: updated date descending (most recent first)

5. FILTER (if --filter specified)
   - Keep only features matching the requested status
   - Case-insensitive comparison

6. DETECT attention flags
   - STALE: IN_PROGRESS + updated > 7 days ago
   - ready to build: APPROVED + no build/deploy reports
   - awaiting spec approval: PLANNING + spec not APPROVED
   - awaiting plan approval: PLANNING + spec APPROVED + plan not APPROVED

7. RENDER output
   - table: formatted markdown table with summary footer + recommendation
   - json: structured JSON with features array and summary object

8. RECOMMEND next action
   - If any STALE feature -> "Resume: ..."
   - If any IN_PROGRESS feature -> "Continue: ..."
   - If any APPROVED feature -> "Start building: ..."
   - If all VERIFIED -> "All features complete."
```

## Status Priority Order

Features are sorted by lifecycle urgency -- active work first, historical last.

| Priority | Status | Meaning | Gate condition |
|----------|--------|---------|----------------|
| 1 | `IN_PROGRESS` | Active work -- resume this first | — |
| 2 | `BUILT` | Module compiled, awaiting deployment | `build: "PASSED"` |
| 3 | `DEPLOYED` | Deployed to environment, awaiting verification | `deploy: "DEPLOYED"` |
| 4 | `APPROVED` | Ready to start building | — |
| 5 | `PLANNING` | Needs plan review/approval | — |
| 6 | `DISCOVERY` | Early stage -- spec in progress | — |
| 7 | `VERIFIED` | Complete -- e2e tests passed | `test: "PASSED"` |

## Dashboard Table Format

```
=== Feature Dashboard: MY_PROFILE ===

| Feature           | Retailers    | Status        | Spec     | Plan (Rev)    | Arch | Assets | Build | Deploy | Test | Next                      | Updated    |
|-------------------|--------------|---------------|----------|---------------|------|--------|-------|--------|------|---------------------------|------------|
| order-return      | MY_RETAILER  | IN_PROGRESS   | APPROVED | APPROVED (v1) | Yes  | 3      | -     | -      | -    | /fluent-build             | 2026-02-25 |
| curbside-pickup   | MY_RETAILER  | BUILT         | APPROVED | APPROVED (v2) | Yes  | 5      | ✓     | -      | -    | /fluent-module-deploy     | 2026-02-25 |
| click-collect     | MY_RETAILER  | PLANNING      | APPROVED | PENDING       | No   | -      | -     | -      | -    | awaiting plan approval    | 2026-02-25 |
| returns-flow      | MY_RETAILER  | DISCOVERY     | DRAFT    | --            | No   | -      | -     | -      | -    | /fluent-use-case-discover | 2026-02-25 |

Summary: 4 features (1 IN_PROGRESS, 1 BUILT, 1 PLANNING, 1 DISCOVERY)

Recommendation: Continue /fluent-module-deploy on "curbside-pickup"
```

### Gate Field Indicators

| Value | Display | Meaning |
|-------|---------|---------|
| `null` (absent) | `-` | Not yet started |
| `"PENDING"` | `…` | In progress / queued |
| `"PASSED"` | `✓` | Gate passed |
| `"DEPLOYED"` | `✓` | Successfully deployed |
| `"FAILED"` | `✗` | Gate failed — needs attention |

### Attention Flags

| Condition | Flag | Rendering |
|-----------|------|-----------|
| IN_PROGRESS + updated > 7 days ago | STALE | Status shows "IN_PROGRESS (STALE)" |
| APPROVED + no implementation evidence | ready to build | Highlighted in recommendation |
| PLANNING + spec not APPROVED | awaiting spec | Next shows "awaiting spec approval" |
| PLANNING + spec APPROVED + plan not APPROVED | awaiting plan | Next shows "awaiting plan approval" |
| Has `basedOn` field | basedOn: slug | Arch column shows "Yes (basedOn: slug)" |

### Column Definitions

| Column | Source | Notes |
|--------|--------|-------|
| Feature | `feature` field | Slug (matches directory name) |
| Retailers | `retailers[]` or `retailer` | Comma-separated if multiple; `--` if null |
| Status | `status` field | With attention flags appended |
| Spec | `spec` field | DRAFT / APPROVED / `--` |
| Plan (Rev) | `plan` + `planRevision` | e.g., "APPROVED (v2)" or "PENDING" or `--` |
| Arch | `architecture` field | Yes / No; "(basedOn: X)" if basedOn field set |
| Phase | `currentPhase` / `totalPhases` | "2/4" if phased, `-` if not phased — set by `/fluent-feature-phase` |
| Build | `build` field | `-` / `…` / `✓` / `✗` — set by `/fluent-build` |
| Deploy | `deploy` field | `-` / `…` / `✓` / `✗` — set by `/fluent-module-deploy` or `/fluent-workflow-deploy` |
| Test | `test` field | `-` / `…` / `✓` / `✗` — set by `/fluent-e2e-test` |
| Next | `next` field or derived | Advisory next skill or attention flag |
| Updated | `updated` field | Last modification date |

## JSON Output Format

When `--format json`:

```json
{
  "profile": "<PROFILE>",
  "scannedAt": "2026-02-25T10:00:00Z",
  "features": [
    {
      "slug": "order-return",
      "retailers": ["MY_RETAILER"],
      "status": "IN_PROGRESS",
      "spec": "APPROVED",
      "plan": "APPROVED",
      "planRevision": 1,
      "architecture": true,
      "build": null,
      "deploy": null,
      "test": null,
      "basedOn": null,
      "next": "/fluent-build",
      "updated": "2026-02-25",
      "path": "accounts/<PROFILE>/features/order-return/",
      "flags": [],
      "provenance": {
        "spec": { "skill": "fluent-use-case-discover", "mode": "C", "timestamp": "2026-02-24T10:00:00Z", "completeness": 87, "entityValidation": "full" },
        "plan": { "skill": "fluent-feature-plan", "timestamp": "2026-02-24T14:00:00Z" }
      }
    },
    {
      "slug": "curbside-pickup",
      "retailers": ["MY_RETAILER"],
      "status": "BUILT",
      "spec": "APPROVED",
      "plan": "APPROVED",
      "planRevision": 2,
      "architecture": true,
      "build": "PASSED",
      "deploy": null,
      "test": null,
      "basedOn": null,
      "next": "/fluent-module-deploy",
      "updated": "2026-02-25",
      "path": "accounts/<PROFILE>/features/curbside-pickup/",
      "flags": []
    }
  ],
  "summary": {
    "total": 4,
    "byStatus": {
      "IN_PROGRESS": 1,
      "APPROVED": 1,
      "PLANNING": 1,
      "DISCOVERY": 1
    },
    "stale": 0
  },
  "recommendation": "Continue /fluent-build on \"order-return\"",
  "warnings": []
}
```

## Workspace Tree View (--tree)

When `--tree` is specified, scan and render the full workspace structure:

```
=== Workspace: MY_PROFILE ===

accounts/MY_PROFILE/
+-- features/                        (4 features)
|   +-- order-return/                (IN_PROGRESS -> /fluent-build)
|   +-- curbside-pickup/             (APPROVED -> /fluent-rule-scaffold)
|   +-- click-collect/               (PLANNING -> awaiting plan approval)
|   +-- returns-flow/                (DISCOVERY -> /fluent-use-case-discover)
+-- SOURCE/                          (2 repos, 1 SDK project)
|   +-- backend/
|   |   +-- fc-module-my-ext/        (module.json: 12 rules)
|   |   +-- fc-module-returns/       (module.json: 5 rules)
|   +-- frontend/
|       +-- mystique-plugin/         (package.json: SDK project)
+-- workflows/
|   +-- MY_RETAILER/                 (8 workflow files)
+-- reports/
|   +-- build/                       (2 reports)
|   +-- pre-deploy/                  (1 report)
|   +-- e2e-test/                    (0 reports)
+-- analysis/
|   +-- code/                        (3 files)
|   +-- topology/                    (1 file)
|   +-- settings/                    (0 files)
+-- tasks/                           (2 task plans)
+-- sessions/                        (5 exports)
```

### Tree Artifact Counting

| Directory | Count Method |
|-----------|-------------|
| `features/*/` | Glob for `status.json` files |
| `SOURCE/backend/*/` | Glob for `module.json` files; count rules from each |
| `SOURCE/frontend/*/` | Glob for `package.json` files; count SDK projects |
| `workflows/RETAILER/` | Count `*.json` excluding `workflow-context.json` |
| `reports/*/` | Count files per subdirectory |
| `analysis/*/` | Count files per subdirectory |
| `tasks/` | Count `*.md` files |
| `sessions/` | Count `*.json` files |

## Multi-Profile View

When no `--profile` is specified and multiple profiles have features:

```
=== Feature Dashboard ===

### ACME_PROD (3 features)
| Feature | Retailers | Status | ... |
...

### ACME_DEV (2 features)
| Feature | Retailers | Status | ... |
...

Overall: 5 features across 2 profiles (2 IN_PROGRESS, 1 APPROVED, 2 PLANNING)
```

## Edge Cases

### No features directory
```
No features found for profile MY_PROFILE.
Start with: /fluent-use-case-discover to define your first feature.
```

### Empty features directory
Same message as above.

### Malformed status.json
```
Warnings:
  features/broken-feature/status.json: Invalid JSON (unexpected token at line 5)
  features/old-feature/status.json: Missing required field "status"
```

Include in table with status `PARSE_ERROR`. Do not skip -- visibility matters.

### Missing fields in status.json
Use `--` for any missing optional field. Required fields (`feature`, `status`) trigger a warning.

### Backward compatibility
If `retailers` array is absent but `retailer` (string) exists, treat as `["retailer-value"]`. If both exist, prefer `retailers`.

### Verified features
Include at bottom of table after all active statuses. Verified features are complete — no further action needed.

## Handoff Protocol

### Emitted Signals
- `-> READY: accounts/PROFILE/features/` -- Dashboard rendered successfully
- `-> NEXT: /fluent-<next-skill> --feature "slug"` -- Recommend resuming highest-priority feature (skill name from status.json `next` field)
- `-> SKIP: No features found` -- Empty workspace, suggest /fluent-use-case-discover

### Consumed Signals
This skill does not consume handoff signals -- it reads `status.json` files directly.

## Error Reporting

| Severity | Code | Scenario | Recovery |
|----------|------|----------|----------|
| LOW | `PARSE_WARNING` | Malformed status.json | Skip feature, show warning |
| LOW | `MISSING_FIELD` | Optional field missing | Display as `--` |
| MEDIUM | `NO_FEATURES` | No feature directories found | Guide to /fluent-use-case-discover |
| MEDIUM | `PROFILE_NOT_FOUND` | Profile directory does not exist | Guide to /fluent-connect |

## Session Tracking

When invoked, log:
```
SKILL: /fluent-feature-status
  args: [--profile PROFILE] [--filter STATUS] [--format FORMAT] [--tree]
  outcome: completed | failed
  features_found: count
  features_by_status: { "IN_PROGRESS": 1, "APPROVED": 2, ... }
  stale_count: count
  warnings: count
  recommendation: "next action"
```

## Integration with Other Skills

| Skill | Relationship | Writes Provenance? |
|-------|-------------|-------------------|
| `/fluent-use-case-discover` | Creates features in DISCOVERY status | Yes — `provenance.spec` (skill, mode A/B/C, completeness, critiqueRounds, entityValidation) |
| `/fluent-feature-plan` | Moves features to PLANNING then APPROVED | Yes — `provenance.plan` (skill, timestamp) |
| `/fluent-feature-explain` | Sets `architecture: true` | Yes — `provenance.architecture` (skill, timestamp) |
| `/fluent-build` | Sets `build: PASSED/FAILED`, advances status to BUILT | Yes — `provenance.build` (skill, timestamp) |
| `/fluent-module-deploy` | Sets `deploy: DEPLOYED/FAILED`, advances status to DEPLOYED | Yes — `provenance.deploy` (skill, timestamp) |
| `/fluent-e2e-test` | Sets `test: PASSED/FAILED`, advances status to VERIFIED | Yes — `provenance.test` (skill, timestamp) |
| `/fluent-rollback` | May regress feature status after deployment rollback | No |
| `/fluent-session` | Complementary -- session changes vs feature lifecycle | No (reads provenance) |
| `/fluent-scope-decompose` | Can batch-create features via `--batch-features` | No |

### Provenance Display

When `provenance` exists in status.json, include it in the detailed view:

```
order-return: APPROVED
  Spec: APPROVED (produced by: fluent-use-case-discover mode:C, 2026-03-11, completeness:87%, validation:full)
  Plan: APPROVED (produced by: fluent-feature-plan, 2026-03-11)
  Build: PASSED (produced by: fluent-build, 2026-03-11)
```

In table view, provenance is not shown (too wide). In JSON output, provenance is included as a nested object per feature. In `--tree` view, provenance appears in the feature detail line.

## Tips

- Run this at the **start of every session** to orient yourself
- Use `--filter IN_PROGRESS` to focus on active work
- Use `--filter APPROVED` to find features ready to build
- The `next` field tells you exactly which skill to invoke next
- Combine with `/fluent-session` for a complete picture
- Use `--tree` when onboarding to a workspace to see everything
- The JSON output (`--format json`) is useful for scripting
- Features are sorted by priority -- first row is always the most urgent
- STALE flag warns about features that may have been forgotten
- Use `--filter BUILT` or `--filter DEPLOYED` to find features awaiting next steps
