[PIR #909] Document area/* as the organizing axis for codev issues#912
Merged
Conversation
…ashboard/synonym hints, follow-up candidates
… codev/roles/architect.md (codev-specific vocabulary)
… from area-labels section
… remove --assignee policy Label changes (made via gh CLI in this same PR): - Add area/dashboard for @cluesmith/codev-dashboard React package - Add area/web for marketing/ - Add area/release for release tooling - Add area/scaffold for codev init/adopt/update/codev-skeleton - Add area/protocols for protocol definitions (distinct from area/porch) - Remove area/panel (4 panel-tab issues relabeled to area/vscode) Doc changes: - Update area table in CLAUDE.md/AGENTS.md/codev/roles/architect.md (14 rows) - Drop --assignee @me policy: reporting an issue ≠ committing to work on it - Drop synonym-alert paragraph and inline synonym alerts (speculative, not useful) - Drop Kubernetes/Terraform parenthetical (irrelevant) - Update plan file to capture the post-plan-approval scope expansion
…pes with trigger comment
… recipes in architect.md CLAUDE.md and AGENTS.md (and their skeleton equivalents) carry the vocabulary table + policy — every session auto-loads them. codev/roles/architect.md (and the skeleton equivalent) carry the operational recipes only — they load only when an architect is spawned, and the recipes are architect-specific bulk ops. Net effect: each piece of content has one canonical home. Future label-set changes touch CLAUDE.md/AGENTS.md (which flows through codev update's .codev-new merge path in adopters); recipe changes touch architect.md (manual update for tier-2 overrides like shannon's, but recipes change less often than the vocabulary).
Introducing 'see other file for content' pointers between framework files is a novel pattern with no precedent in this repo — every existing CLAUDE.md mention in framework files is for diffing or scaffolding, not content lookup. The dedup logic was sound (CLAUDE.md auto-loads, so architect agents already have the vocabulary in context), but the explicit pointers were brittle: redundant when CLAUDE.md is loaded, misleading if architect.md is ever read standalone. Cleaner: each file is self-contained for its audience. CLAUDE.md/AGENTS.md have vocabulary + policy. architect.md has recipes. No 'see X' pointers.
…l; frontmatter rule misapplied)
amrmelsayed
added a commit
that referenced
this pull request
May 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PIR Review: Treat
area/*labels as a first-class organizing conceptFixes #909
Summary
Documented the
area/*label convention as the primary axis for organizing GitHub issues in codev, so a fresh architect session can group / edit / audit / bulk-move issues without re-discovering the convention. Restructured the label set during the implement phase from 10 to 14 labels (addedarea/dashboard,area/web,area/release,area/scaffold,area/protocols; removedarea/panelwith 4 issues relabeled toarea/vscode). The skeleton'stemplates/{CLAUDE,AGENTS}.mdandroles/architect.mdget framework-neutral guidance so adopters inherit the pattern without codev's specific vocabulary.Files Changed
Doc-only PR. No code changes, no test changes, no protocol-definition changes.
Commits
Plus thread-file updates and porch state-transition commits.
Test Results
npm run build: ✓ pass (built in ~1.4s, packages/codev/skeleton refreshed)npm test: ✓ pass (151 test files, 3188 passed, 13 pre-existing skips)dev-approvalgate: reviewer ran the fourghrecipes (group / edit / audit / bulk-move) against the live repo; group recipe correctly tallied 9 areas with open issues (after--limit 500fix mid-implementation); audit recipe surfaced expected unlabeled-issue list; vocabulary table reviewed for accuracy.Architecture Updates
No changes to
codev/resources/arch.md. This PR is pure documentation — the label convention has existed informally since the labels were created; #909 only documents it. No new modules, no API contract changes, no protocol changes.Lessons Learned Updates
Updated
codev/resources/lessons-learned.mdwith two durable lessons that emerged during this PR:Cross-file content references in framework files are brittle. When deduplicating documentation across
CLAUDE.mdand role files, "see X for the table" pointers introduce a novel pattern (no precedent in the codebase). The dedup logic is sound —CLAUDE.mdauto-loads in every session — but the explicit pointer is redundant when the file IS loaded and misleading if it isn't. Cleaner: each file is self-contained for its audience.Skeleton's user-facing layer hardcodes
ghdirectly; the forge abstraction is internal-only. Codev has a forge concept-command abstraction (packages/codev/scripts/forge/<provider>/) used by porch/doctor/etc., but skeleton docs and protocol prompts all useghdirectly. When adding new skeleton content, match the establishedgh-direct pattern rather than introducing localized forge-CLI awareness in one section.Things to Look At During PR Review
Scope expansion at dev-approval. The original plan (approved at
plan-approval) listed label changes as out-of-scope. During the dev-approval review, the reviewer requested an audit of the label set, which surfaced gaps (noarea/dashboard, noarea/web/area/release/area/scaffold/area/protocols) and a wrong description forarea/panel. The PR was expanded to: (a) create 5 new labels viagh label create, (b) deletearea/panelafter relabeling its 4 issues toarea/vscode, (c) restructure the table. This is documented in the plan file's "Scope Expansion" section. Worth a careful read of the final label set vs. the original "out of scope" intent.area/panel≠area/dashboarddisambiguation. The 4 issues previously labeledarea/panel(vscode: introduce a Codev panel tab (bottom-area view container) to relieve sidebar overload #812, vscode: migrate Recently Closed view from sidebar to Codev panel tab #813, vscode: migrate Team view from sidebar to Codev panel tab #814, vscode: migrate Status view from sidebar to Codev panel tab #815) are all titled "vscode: migrate ... view to panel tab" — they're about the VSCode bottom-panel UI surface, NOT the@cluesmith/codev-dashboardReact package. Initial mis-framing would have conflated them. The relabel wentarea/panel → area/vscode(not→ area/dashboard). Verify the 4 issues now read sensibly underarea/vscode.Doc dedup direction. Vocabulary table + policy live in
CLAUDE.md/AGENTS.md; operational recipes live incodev/roles/architect.md. No cross-references between files. Verify the split feels right — the alternative ("everything in all three files") was explicitly rejected as duplication-heavy.--assignee @mepolicy removal. A prior memory rule ("allgh issue createincludes--assignee @me") was wrong: reporting an issue ≠ committing to do the work. The policy bullet was removed from all six files; the memory file (feedback_assign_issues_to_user.md) was updated to scope the self-assign behavior to actual user-take-on intent.Skeleton variants stay vocabulary-free.
grep -rE "area/(docs|vscode|dashboard|consult|tower|cross-cutting|porch|protocols|config|terminal|scaffold|release|web|core)" codev-skeleton/returns no output — verified at multiple checkpoints. The skeleton uses<prefix>/<value>placeholders throughout.Shannon follow-up filed. Issue cluesmith/shannon#1872 tracks adopting the convention in shannon, with a 12-label proposed vocabulary derived from shannon's apps/packages layout. Out of scope for this PR but cross-linked for traceability.
3-Way Consultation Verdicts (PIR single-pass)
PIR runs one advisory consultation pass at PR-creation (
max_iterations: 1); there is no automated re-review. Below are the verdicts and the builder's disposition. The human at theprgate is the sole remaining reviewer for any contested item.--limit 500fix as a good catch.Codex finding 1: "Implementation deviates from the approved plan by splitting content across files instead of keeping each target self-contained"
Disposition: rebutted. The plan's "belt-and-suspenders" framing (lines 22–25 of the plan) was overridden at the
dev-approvalgate by an explicit reviewer request to dedup. The new content split (vocabulary + policy in CLAUDE.md/AGENTS.md; recipes incodev/roles/architect.md) is documented in the plan file's "Scope Expansion" section (a "Content split" subsection has been added in response to this finding), in the thread file, and in point 3 of this section. Both Gemini and Claude evaluated the final split and approved it; Gemini specifically called it "structurally superior to the original plan." Mid-flight scope changes authorized at the human gate, with documented rationale, are the standard PIR mechanism for plan refinement — not a defect. No code change needed.Codex finding 2: "Approved PIR plan file is missing required YAML frontmatter (
approved/validated)"Disposition: rebutted (misapplied rule). The frontmatter requirement in
CLAUDE.mdlines 157-164 applies to architect-pre-created plans — when the architect writes a plan and approves it before spawning a builder, so porch can skip the plan phase. In #909, the builder wrote the plan during the plan phase under the PIR protocol; approval flowed through theplan-approvalgate incodev/projects/909-architect-treat-area-labels-as/status.yaml(recorded2026-05-28T...). The status.yaml-recorded gate IS the approval mechanism for builder-written plans — adding YAML frontmatter would be redundant with porch state. No frontmatter is required for plans written via the PIR plan phase. No code change needed.How to Test Locally
For reviewers pulling the branch:
pir-909→ View DiffWhat to verify (cold-session check — the killer acceptance test from the issue body):
--limit 500) and tally by areaarea/porchtoarea/tower" → should run the edit recipearea/coreissues should move toarea/tower— do the relabel" → should run the bulk-move recipe--assignee @meby defaultgh label list --search area/returns the 14 labels listed in the tableMechanical checks:
diff CLAUDE.md AGENTS.md→ empty (byte-identical)diff codev-skeleton/templates/CLAUDE.md codev-skeleton/templates/AGENTS.md→ only the 4-line preamble differs (intentional)grep -rE "area/(docs|vscode|dashboard|consult|tower|cross-cutting|porch|protocols|config|terminal|scaffold|release|web|core)" codev-skeleton/→ no output (no vocabulary leak)gh label list --search area/→ 14 labelscodev/roles/architect.mdwork against the live repo