Skip to content

feat(#347): promote product + design roles to sub-agents (Wave 3 PR 2)#356

Merged
atlas-apex merged 3 commits into
devfrom
feature/GH-347-promote-product-design-roles-to-agents
May 20, 2026
Merged

feat(#347): promote product + design roles to sub-agents (Wave 3 PR 2)#356
atlas-apex merged 3 commits into
devfrom
feature/GH-347-promote-product-design-roles-to-agents

Conversation

@atlas-apex

Copy link
Copy Markdown
Collaborator

Summary

  • Six new product + design sub-agent wrappers — Omar (Head of Product), Mariam (Product Manager), Hanan (Product Analyst), Maha (Head of Design), Nour (UI Designer), Iman (UX Designer). Each is a thin runtime wrapper that delegates identity to the canonical role file in roles/<dept>/<slug>.md (Axis 1 WRAP shape from AgDR-0050). Operators can now Agent(subagent_type: "product-manager") etc. instead of relying solely on in-thread persona adoption.
  • All sonnet, full toolset — every entry in the AgDR-0050 § Axis 2 default-model matrix maps the 6 product + design personas to sonnet; allowed-tools is the standard Bash, Read, Edit, Write, Grep, Glob superset (matches the engineering-dept defaults, not the QA-engineer read-only carve-out). Adopters re-route per agent via agent-routing.yaml once [Feature] Centralised agent-routing config — agent-routing.yaml in private repo, propagates to .claude/agents/*.md at SessionStart #351 PR 2 ships the SessionStart sync hook.
  • ## Activation mode already on each role file — PR 1 added the section to all 19 roles (engineering, product, design, security, data) as part of its churn. This PR adds wrappers only and does NOT touch role files. The class assignments (Omar/Hanan/Maha = isolated-work-class; Mariam/Nour/Iman = in-flow-class) match Axis 6 exactly and are re-verified by invariant 6 of the smoke test on every run.
  • Smoke-test scope expansiontest_engineering_agents_wrap_shape.sh renamed to test_agent_wrap_shape.sh (no longer dept-pinned) and its agent matrix grows from 7 → 13 entries with a new dept field per row so the @roles/<dept>/<slug>.md reference check is per-dept aware. Test header documents the wave progression (PR 1 → PR 2 → PR 3 → PR 4) so future contributors see the growth arc.
  • Wave progression — PR 2 of 5 for ticket [Feature] Promote all 19 role definitions to Claude Code sub-agents (per-role model + tool restriction + isolated context) #347 — count refresh in CLAUDE.md (12 → 18 agents) reflects the new total post-merge, stays under the 25-word Wave 1 invariant, and surfaces the "growing to 24 across Wave 1-3" framing so the target reads as a planned arc rather than a still-pending one-shot. Per AgDR-0050-agent-runtime-overhaul.

Testing

  • bash .claude/agents/tests/test_agent_wrap_shape.sh — PASS (13 agent wrappers verified across 4 invariants: existence + frontmatter completeness + model-matrix match + role-file body reference; plus 19 role files verified for ## Activation mode Class coverage)
  • bash .claude/hooks/tests/test_token_efficiency_wave1.sh — PASS (Wave 1 invariants 1-4 all green; CLAUDE.md agent-count row stays at 19 words, well under the 25-word cap)
  • Spot-checked .claude/agents/head-of-product.md frontmatter shape — matches the PR 1 .claude/agents/tech-lead.md template exactly (name / description / model: sonnet / allowed-tools / persona_name: Omar)

Refs #347

Glossary

Term Definition
Wrap shape (WRAP) The Axis 1 file-shape decision from AgDR-0050: roles/<dept>/<slug>.md stays canonical for persona definition; .claude/agents/<slug>.md is a thin runtime wrapper owning model + tool-restriction + agent metadata only.
Isolated-work-class Axis 6 role category that spawns a dedicated sub-agent on trigger (heads-of, analysts, auditors) — full context isolation + per-agent model assignment.
In-flow-class Axis 6 role category that adopts the persona in-thread on trigger (engineers, PMs, designers doing ship-the-code work) — shared context with the main thread wins over isolation.
Wave 3 PR 2 This PR in the AgDR-0050 wave plan: Wave 1 was PR 1 (engineering + role-file Activation-mode section); Wave 3 is the parallel-shippable group of PR 2 (this) + PR 3 + PR 4 + #351 PR 2.

me2resh added 3 commits May 20, 2026 20:31
…xis 1 + 2

- Omar (head-of-product), Mariam (product-manager), Hanan (product-analyst)
- Maha (head-of-design), Nour (ui-designer), Iman (ux-designer)
- All sonnet per AgDR-0050 § Axis 2 default-model matrix
- All ship full toolset (Bash, Read, Edit, Write, Grep, Glob)
- WRAP shape: each agent file delegates identity to roles/<dept>/<slug>.md
- ## Activation mode sections were added to all 19 role files in PR 1;
  this PR ships wrappers only (no role-file churn)

Refs #347
- Rename test_engineering_agents_wrap_shape.sh → test_agent_wrap_shape.sh
  so the file name no longer pins to one dept (Waves 3-4 will add
  security + data + utility-agent invariants under the same shape).
- Grow ENG_AGENTS → ROLE_AGENTS matrix from 7 → 13 entries, with the
  4th field encoding the dept so the @roles/<dept>/<slug>.md reference
  check is dept-aware instead of hardcoded to engineering.
- Header comment now documents the wave history (PR 1 shipped, PR 2
  here, PR 3 + PR 4 upcoming) so future contributors see the growth
  arc rather than treating the test as final.
- ## Activation mode coverage on all 19 role files is unchanged from
  PR 1 — verified as a regression check, all 19 still PASS.

Refs #347
… + design

Was 12 (5 utility + 7 engineering); now 18 (5 utility + 7 engineering +
6 product-design) after #347 PR 2 lands the product + design dept
wrappers. Stays under the 25-word Wave 1 invariant (test_token_
efficiency_wave1.sh) and surfaces the wave-progression context so the
target of 24 doesn't read as a still-pending one-shot.

Refs #347

@atlas-apex atlas-apex left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review: PR #356

Commit: 996e92ec128189d129547e259b379c10f233afac

Summary

Wave 3 PR 2 of #347's 5-PR plan: six new product + design sub-agent wrappers (Omar, Mariam, Hanan, Maha, Nour, Iman), smoke-test rename + matrix expansion (7→13), and CLAUDE.md agent-count refresh (12→18). All 6 new agents follow the WRAP shape established in PR 1 — frontmatter owns model + tools + persona metadata, body delegates identity to @roles/<dept>/<slug>.md. Zero role files modified, zero utility agents touched, zero routing/sync/drift work.

Checklist Results

  • Architecture & Design: Pass — pure WRAP wrappers, no logic duplication, identity stays in roles/
  • Code Quality: Pass — uniform shape across all 6 agents, identical activation-context boilerplate
  • Testing: Pass — smoke test grown from 7→13 entries with 4-field dept-aware parsing; PR body reports 13/13 + 19/19 PASS
  • Security: N/A — frontmatter + boilerplate markdown only, no secrets / auth / I/O surface
  • Performance: N/A
  • PR Description & Glossary: Pass — narrative bullets per pr-quality.md; Glossary present and correctly tightened (4 terms, does NOT redefine WRAP/Activation-mode primitives that PR 1 already glossed)
  • Technical Decisions (AgDR):Pass — all decisions trace to AgDR-0050 § Axis 2 (default model matrix) and § Axis 6 (HYBRID role-trigger integration); no new decisions introduced
  • Adopter Handbooks: N/A — no handbooks loaded (no architecture/general always-load files in scope; diff is pure markdown + bash test, no language handbooks triggered)

Verification against the brief

1. WRAP shape uniform across 6 new agents — VERIFIED. All 6 carry identical frontmatter field set (name / description / model / allowed-tools / persona_name) and identical ## Activation context boilerplate. Bodies reference @roles/design/head-of-design.md, @roles/product/head-of-product.md, @roles/product/product-analyst.md, @roles/product/product-manager.md, @roles/design/ui-designer.md, @roles/design/ux-designer.md respectively — dept matches the role file's canonical home in every case.

2. Model matrix matches AgDR-0050 § Axis 2 EXACTLY — VERIFIED. All 6 = sonnet. No drift.

3. Allowed-tools uniform — VERIFIED. All 6 carry Bash, Read, Edit, Write, Grep, Glob (full superset). No stripping.

4. Smoke test rename clean — VERIFIED. GitHub reports changeType: RENAMED at 70% similarity (history preserved). Matrix grown from 7 → 13 entries with new dept field (4-field colon-delimited parsing via IFS=':' read). Header documents the wave history (PR 1 → PR 4). Invariant 4 updated to use per-dept path @roles/${dept}/${slug}.md. Pass message updated to "role-derived agent wrap-shape" (no longer engineering-pinned).

5. CLAUDE.md word count — VERIFIED. New cell = 18 words (18 sub-agents (5 utility + 7 engineering + 6 product-design). Growing to 24 across Wave 1-3 per AgDR-0050.). Comfortably under the 25-word Wave 1 cap. Minor nit: PR body claims 19 words; actual is 18. Non-blocking.

6. No role files modified — VERIFIED. gh pr view --jq '.files[] | select(.path | startswith(\"roles/\"))' returned empty.

7. No utility agents touched — VERIFIED. None of rex.md / hatim.md / code-reviewer.md / security-reviewer.md / etc. appear in the file list.

8. No routing config / sync hook / drift guards — VERIFIED. No matches for detect-role-trigger, sync-agent, or agent-routing in the file list. PR stays in its lane (PR 2 territory only).

9. No role-trigger integration — VERIFIED (subset of #8).

10. PR body — VERIFIED. Narrative bullets (each answers what + why); Glossary present and correctly tightened — defines only Wrap shape (WRAP), Isolated-work-class, In-flow-class, Wave 3 PR 2 (no redefinition of PR 1's already-glossed primitives); uses Refs #347 not Closes; references Per AgDR-0050-agent-runtime-overhaul. correctly.

11. Wave 1 invariants — VERIFIED. CLAUDE.md row stays at 18 words ≤ 25-word cap; PR body reports 4/4 Wave 1 invariants green.

Issues Found

None blocking.

Suggestions

  • (nit, non-blocking) PR body's testing section claims "19 words" for the CLAUDE.md row; actual count is 18. Minor undercount in the author's prose; the row itself is well within the 25-word cap so this changes nothing about the invariant.

Verdict

APPROVED (submitted as --comment because Rex cannot self-approve own-authored PRs; verdict is approval-equivalent — operator should write the marker.)


Reviewed by Rex (Code Reviewer Agent)
Reviewed commit: 996e92ec128189d129547e259b379c10f233afac

@atlas-apex atlas-apex merged commit cb5b9f2 into dev May 20, 2026
3 checks passed
@atlas-apex atlas-apex deleted the feature/GH-347-promote-product-design-roles-to-agents branch May 20, 2026 23:57
me2resh added a commit that referenced this pull request Jun 5, 2026
#356)

* feat(#347): add 6 product + design sub-agent wrappers per AgDR-0050 Axis 1 + 2

- Omar (head-of-product), Mariam (product-manager), Hanan (product-analyst)
- Maha (head-of-design), Nour (ui-designer), Iman (ux-designer)
- All sonnet per AgDR-0050 § Axis 2 default-model matrix
- All ship full toolset (Bash, Read, Edit, Write, Grep, Glob)
- WRAP shape: each agent file delegates identity to roles/<dept>/<slug>.md
- ## Activation mode sections were added to all 19 role files in PR 1;
  this PR ships wrappers only (no role-file churn)

Refs #347

* test(#347): extend agent wrap-shape smoke test to cover product + design

- Rename test_engineering_agents_wrap_shape.sh → test_agent_wrap_shape.sh
  so the file name no longer pins to one dept (Waves 3-4 will add
  security + data + utility-agent invariants under the same shape).
- Grow ENG_AGENTS → ROLE_AGENTS matrix from 7 → 13 entries, with the
  4th field encoding the dept so the @roles/<dept>/<slug>.md reference
  check is dept-aware instead of hardcoded to engineering.
- Header comment now documents the wave history (PR 1 shipped, PR 2
  here, PR 3 + PR 4 upcoming) so future contributors see the growth
  arc rather than treating the test as final.
- ## Activation mode coverage on all 19 role files is unchanged from
  PR 1 — verified as a regression check, all 19 still PASS.

Refs #347

* docs(#347): CLAUDE.md agent-count row reflects 18 agents post product + design

Was 12 (5 utility + 7 engineering); now 18 (5 utility + 7 engineering +
6 product-design) after #347 PR 2 lands the product + design dept
wrappers. Stays under the 25-word Wave 1 invariant (test_token_
efficiency_wave1.sh) and surfaces the wave-progression context so the
target of 24 doesn't read as a still-pending one-shot.

Refs #347

---------

Co-authored-by: me2resh <ahmed.abdelaliem@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants