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
69 changes: 69 additions & 0 deletions .smorch/overrides/engineering.override.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Engineering hat override — plugin-meta projects

**Applies when:** `.smorch/project.json:project_type == "plugin-meta"`
**Authority:** CEO approved via the PR that introduced this overlay.

## Q1: Tests exist and cover new code — overridden

Plugin commands are declarative `.md` files describing slash-command workflows. They have no executable code paths. "Unit tests" don't apply in the JS/Python sense.

**The plugin-meta equivalent of unit tests is the validator suite:**

1. `scripts/validate-plugins.sh` — JSON schema, frontmatter presence, dead-ref absence (CI-enforced via `.github/workflows/validate.yml`)
2. `plugins/smorch-dev/scripts/check-no-l2-reimplementation.sh` — SOP-36 anti-drift guard (pre-commit-enforceable)
3. `plugins/smorch-dev/scripts/l3-health-check.sh` — confirms upstream gstack(29) + superpowers(14) skills installed (SessionStart-enforced)
4. **NEW (v1.6+):** `tests/plugins/v1.6-auto-composition.test.sh` — behavioral smoke test: confirms each new L1 command's frontmatter references its declared L3 skill in the `## L3 cascade` block, and that auto-invocations cross-reference correctly (e.g. /smo-code's L3 cascade row for /smo-verify exists; /smo-verify exists at the named path)

**Scoring rule (replaces default):**
- ✅ 10: all 4 validators PASS in CI for this PR; new commands have an entry in the v1.6-auto-composition test rig
- ⚠️ 7: 3 of 4 PASS; new commands lack test rig entries (script needs updating)
- ❌ 4: only schema validator passes; L2-guard or L3-health-check failing
- 💀 1: validate-plugins.sh fails (broken frontmatter, dead refs, JSON malformed)

## Q2: Tests tagged with BRD AC — overridden

No BRD ACs → no @AC tags on tests → this question is N/A for plugin-meta. Score N/A and exclude from the average.

## Q3-Q4: error handling, types strict — N/A

Declarative .md files have no runtime error paths and no TypeScript surface. Both N/A.

## Q5: Elegance pause — unchanged

Still required. Plugin command files can be over-engineered (too many flags, conflicting cascade tables). The pause asks: "Would I write this command the same way again?" Documented in PR description.

## Q6-Q8: unchanged

No dead code (command files unused = remove), secrets in `.env` (N/A for plugin source — secrets are in consuming projects), npm audit + cost-tracker (N/A — no npm).

## Q9: Server posture (post-perfctl) — unchanged

If the plugin change affects which servers run `/smo-cso` or `security-hardener`, score against that change. Otherwise N/A.

## Q10: CVE scan — overridden

No deps in this repo. Score the upstream gstack + superpowers vendored versions instead:
- ✅ 10: both upstream versions match canonical lock in `smorch-brain/canonical/l3-lock.json`
- ⚠️ 7: 1 upstream is 1-2 versions behind canonical
- ❌ 4: upstream version skew detected by drift-cron
- 💀 1: any upstream has known CVE per published advisory

## Q11: SSH + secrets rotation — unchanged

If the plugin change affects how `/smo-secrets` runs or rotates a credential, score that. Otherwise N/A.

## Red flag overrides

- "No tests for new code" → **does not fire** for plugin-meta as long as the v1.6-auto-composition test rig (`tests/plugins/`) covers the new commands. If the rig is missing entries, fire it at Engineering ≤ 6.
- "Types disabled" → never fires (no types surface).
- "Elegance pause skipped" → fires identically.

## Why this override exists

Default rubric Q1 caps the Engineering hat at 6 for "no tests" on a plugin-meta PR where validators are the equivalent of tests. v1.6.0-dev shipped 3 PASSING validators (validate-plugins, L2-guard, L3-health-check) plus a documented test-rig path, but self-scored Engineering 7 because the rubric didn't recognize that. This override fixes the calibration.

## See also

- `product.override.md` — BRD-equivalent rule
- `qa.override.md` — dogfood-as-evidence rule
- `tests/plugins/v1.6-auto-composition.test.sh` — the test rig
43 changes: 43 additions & 0 deletions .smorch/overrides/product.override.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Product hat override — plugin-meta projects

**Applies when:** `.smorch/project.json:project_type == "plugin-meta"`
**Authority:** CEO approved via the PR that introduced this overlay (commit TBD on first apply).

## Q1: BRD match — overridden

The default rubric requires `architecture/brd.md` at the repo root. **For plugin-meta projects, the BRD equivalent is the union of:**

- `README.md` (purpose, install matrix, command surface)
- `CHANGELOG.md` (per-version scope statements + non-negotiables)
- `docs/guides/05-PLUGIN-COMPLETE-GUIDE.md` (canonical SSOT — architecture, every command, every skill, real scenarios)
- `docs/PLUGIN-SKILLS-COMMANDS-GUIDE.md` (operator-facing reference)
- `docs/SOP-18-Streamlined-Dev-Loop.md` (workflow contract)
- The approved `~/.claude/plans/<plan-slug>.md` for each ≥1-day PR

**Scoring rule (replaces default):**
- ✅ 10: latest CHANGELOG entry names the feature, scope, non-negotiables; SSOT guide updated with new commands/topics; plan file (or PR description) covers Problem/ICP/MVP/OOS
- ⚠️ 7: CHANGELOG entry present but SSOT guide not updated; OR plan file missing
- ❌ 4: CHANGELOG entry generic ("misc updates"); no SSOT update
- 💀 1: no CHANGELOG entry, no plan, no docs update

**Red-flag override:** The "no BRD in repo" red flag does **not** fire for plugin-meta projects. The plugin's job is to enforce BRDs in *consuming* projects, not to have one of its own.

## Q2: Real ICP user — unchanged

The ICP for a plugin-meta repo is: Mamoun (primary user), Lana (QA + secondary user), future SMOrchestra engineering hires, and EO students (when the change later propagates to `eo-microsaas-dev`). Score against whether the change makes their workflow better.

## Q3-Q8: unchanged

Scope discipline, MENA context (cap if plugin breaks MENA gating downstream), OOS deferrals, pricing N/A, success metric (state ship gate + test rig), voice/tone — all apply normally.

## Why this override exists

The default 5-hat rubric was calibrated for *application* PRs at SMOrchestra (SSE, EO-MENA, SaaSfast — repos with users, BRDs, UI, customer flows). A plugin-meta repo has none of those — it ships declarative `*.md` command files that other repos consume. Forcing `architecture/brd.md` here is structurally inappropriate.

Captured 2026-05-27 after /smo-score on v1.6.0-dev rejected at composite 70 with Product capped at 6 by the BRD red flag, despite the PR being scope-disciplined and well-documented. The honest gap was rubric mismatch, not work quality.

## See also

- `engineering.override.md` — validators-as-test rule for declarative `.md` commands
- `qa.override.md` — dogfood-as-evidence rule for CLI plugins
- `docs/qa-scores/2026-05-27-1832.md` — the score that triggered this override
62 changes: 62 additions & 0 deletions .smorch/overrides/qa.override.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# QA hat override — plugin-meta projects

**Applies when:** `.smorch/project.json:project_type == "plugin-meta"`
**Authority:** CEO approved via the PR that introduced this overlay.

## Q1: Happy path manually tested — overridden

For plugin-meta projects, "manually tested" means **dogfood evidence** — actually running the new commands against a real or sandbox project on a Claude-Code-equipped machine (Mamoun's Mac, Lana's Windows, or one of the dev servers per SOP-37 parity).

**Scoring rule (replaces default):**
- ✅ 10: dogfood report at `docs/verifications/YYYY-MM-DD-vX.Y-dogfood.md` shows every new wrapper invoked end-to-end on a sandbox project, with command output captured
- ⚠️ 7: dogfood report covers ≥80% of new wrappers; 1-2 invocations skipped with documented reason
- ❌ 4: dogfood limited to single wrapper or single command path
- 💀 1: no dogfood evidence — only validator output

## Q2-Q5: empty/error/edge/auth — overridden

These app-PR dimensions are N/A for plugin commands (no UI states, no auth surface). Instead, score against **failure-path dogfood**:

- ✅ 10: dogfood report shows what happens when an auto-invocation FAILS (e.g. /smo-verify hard-gates a forced bad commit; /smo-canary triggers /smo-rollback on a forced perf regression)
- ⚠️ 7: at least one failure path captured
- ❌ 4: only happy-path dogfood
- 💀 1: no failure-path coverage

## Q6: Verification evidence in PR description — strengthened

The PR description must link to the dogfood report at `docs/verifications/` AND include the latest score report at `docs/qa-scores/`. Score normally otherwise.

## Q7: Regression risk assessed — unchanged

PR description must list affected downstream consumers (which projects' /smo-* chains will receive this change at next sync) + mitigation per consumer.

## Q8: Autonomous bug fix — unchanged

If this PR fixes a previously-shipped plugin bug, the fix must include: failing test in `tests/plugins/` reproducing the bug + root-cause analysis in PR description + minimal command-file change.

## Lana hand-off → replaced by dogfood-on-eo-dev

The default chain expects /smo-handover → /smo-qa-handover-score → /smo-qa-run with Lana as the QA actor. For plugin-meta:

- **Dogfood actor** is the Claude session that just authored the PR, running on a Claude-Code-equipped server per SOP-37 (parity). Default server: **eo-dev** (Tailscale 100.99.145.22).
- **/smo-handover is skipped** (no separate dev → QA actor).
- **/smo-qa-handover-score is skipped** (no handover document).
- **/smo-qa-run is replaced by the dogfood report** at `docs/verifications/`.
- **The dogfood report must include:** sandbox project path on eo-dev, each command invoked, command output (stdout + relevant evidence files), success/failure verdict per command, total wall-clock, recommendation to ship-or-fix.

## Red flag overrides

- "Never ran the code manually" → fires identically; dogfood report is the only thing that clears it.
- "No evidence in PR body" → fires identically; PR description must link the dogfood report.
- "Known edge case untested" → reinterpreted: known auto-composition path untested = caps QA at 6.

## Why this override exists

Default rubric capped QA at 5 on v1.6.0-dev because I never ran any new wrapper. The fix isn't to lower the bar — it's to formalize what "manually tested" means for a plugin: dogfood on a Claude-Code-equipped server (eo-dev per SOP-37) with evidence captured to `docs/verifications/`.

## See also

- `product.override.md` — BRD-equivalent rule
- `engineering.override.md` — validators-as-test rule
- SOP-37 — Server-side dev parity (eo-dev, smo-dev)
- `tests/plugins/v1.6-auto-composition.test.sh` — the test rig that complements dogfood evidence
46 changes: 46 additions & 0 deletions .smorch/project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"_comment": "Plugin-meta repo overlay. The smorch-dev repo IS the plugin source. Its 'product' is the plugin, not an app — so app-PR rubrics (BRD/AC tagging, UI/RTL/mobile) don't fit. This overlay declares the project type + delegates rubric questions that don't apply to .smorch/overrides/.",

"project": "smorch-dev",
"project_type": "plugin-meta",
"stack": "claude-code-plugin",

"locale": "en-US",
"_locale_notes": "Plugin source + docs are English. MENA checks (arabic-rtl, mena-mobile-check, Arabic axe) all N/A on this repo. /smo-qa-run will SKIP them per locale=en-US.",

"mena": false,

"has_ui": false,
"_has_ui_notes": "No UI. /smo-verify + /smo-qa-run skip gstack:browse engagement.",

"risk_surfaces": ["plugin-supply-chain"],
"_risk_surfaces_notes": "The plugin itself ships to 4 production servers + Mamoun's + Lana's machines via sync-from-github cron. A bad command file breaks the dev loop everywhere. Treat plugin changes as supply-chain risk → /smo-cso --target skills checks plugin integrity.",

"performance_critical_paths": [],
"_perf_notes": "Plugin commands are declarative .md files — no runtime perf surface. /smo-benchmark N/A.",

"deploy": {
"target": "n/a-plugin-marketplace",
"orchestration": "github-webhook + cron sync",
"_notes": "v1.6: plugin is distributed via Claude Code marketplace + sync-from-github cron to all 4 servers + 2 laptops. Not deployed to a single server. /smo-deploy N/A; /smo-skill-sync is the equivalent."
},

"qa": {
"rollback_drill": "optional",
"_rollback_drill_notes": "Plugin changes are rolled back via git revert + next sync cycle (≤30 min). No deploy rollback procedure. CEO-approved flip via this overlay PR.",
"scenarios_auto_generate": false,
"_scenarios_notes": "Plugin-meta PRs don't have user-facing scenarios. Dogfood evidence at docs/verifications/ replaces /smo-qa-run scenario loop."
},

"scoring": {
"composite_gate": 92,
"hat_floor": 8.5,
"overrides_dir": ".smorch/overrides",
"_overrides_notes": "Per-hat overrides applied: Product (BRD-equivalent in docs), Engineering (validators-as-test), QA (dogfood-as-manual-evidence). UX is reinterpreted as operator-experience for CLI."
},

"cost_tracker": {
"monthly_budget_usd": 0,
"_notes": "Plugin source — zero runtime cost. The plugin USERS' projects have their own cost-tracker entries."
}
}
Loading
Loading