From 8dff4d41d907b65fdcc596d86ab788f3f6f0d980 Mon Sep 17 00:00:00 2001 From: DavidQ Date: Sat, 20 Jun 2026 17:37:01 -0400 Subject: [PATCH] PR_26171_ALPHA_075 team based PR naming --- docs_build/dev/PROJECT_INSTRUCTIONS.md | 34 +++++++--- docs_build/dev/PROJECT_MULTI_PC.txt | 58 +++++++++++----- ...based-pr-naming-manual-validation-notes.md | 17 +++++ ...PHA_075-team-based-pr-naming-validation.md | 34 ++++++++++ ...PR_26171_ALPHA_075-team-based-pr-naming.md | 62 ++++++++++++++++++ .../dev/reports/codex_changed_files.txt | 24 ++----- docs_build/dev/reports/codex_review.diff | Bin 80482 -> 13831 bytes 7 files changed, 186 insertions(+), 43 deletions(-) create mode 100644 docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-manual-validation-notes.md create mode 100644 docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-validation.md create mode 100644 docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming.md diff --git a/docs_build/dev/PROJECT_INSTRUCTIONS.md b/docs_build/dev/PROJECT_INSTRUCTIONS.md index 3c3afa7bd..dbc044b99 100644 --- a/docs_build/dev/PROJECT_INSTRUCTIONS.md +++ b/docs_build/dev/PROJECT_INSTRUCTIONS.md @@ -11,22 +11,38 @@ PLAN_PR → BUILD_PR → APPLY_PR PR names MUST follow: -`PR__<###>-` +`PR___<###>-` Where: - `YY` = year (2 digit) -- `JJJ` = Julian day (001–365) +- `JJJ` = Julian day (001-365) +- `TEAM` = required team ownership token from `docs_build/dev/PROJECT_MULTI_PC.txt` - `###` = sequence for the day (001+) Example: -- `PR_26124_001-palette-baseline` -- `PR_26124_002-tool-fix-asset-manager` +- `PR_26171_ALPHA_065-message-studio-parent-child-table-foundation` +- `PR_26171_BETA_069-message-tts-profile-contract-alignment` +- `PR_26171_GAMMA_071-main-merge-conflict-recovery` + +Branch names MUST mirror PR ownership: + +`pr/--<###>-` + +Branch examples: +- `pr/26171-ALPHA-065-message-studio-parent-child-table-foundation` +- `pr/26171-BETA-069-message-tts-profile-contract-alignment` +- `pr/26171-GAMMA-071-main-merge-conflict-recovery` Rules: - Must be unique per day - Must be sortable +- `TEAM` is required +- `TEAM` ownership comes from `docs_build/dev/PROJECT_MULTI_PC.txt` +- Team ownership is independent of machine, workspace, laptop, desktop, or environment - Description must be short and hyphenated - Do NOT reuse old `PR_11_*` format for new PRs +- Existing PC/LAPTOP, desktop/laptop, workspace, environment, or machine-parity examples are historical only +- Future PR reports, recovery reports, validation reports, and manual validation notes must include TEAM ownership ## CHATGPT EXECUTION ROLE @@ -817,7 +833,7 @@ If the user says `NEXT`: Use the current naming standard: -`PR__<###>-` +`PR___<###>-` Do NOT continue old `PR_11_*` naming for new work. @@ -2027,18 +2043,18 @@ Required instruction reads: - Read `docs_build/dev/PROJECT_INSTRUCTIONS.md`. - Read `docs_build/dev/PROJECT_MULTI_PC.txt`. - Treat the newest applicable section in `PROJECT_INSTRUCTIONS.md` as authoritative when rules overlap. -- Treat the current owner/parity section in `PROJECT_MULTI_PC.txt` as authoritative for Team Alpha / Team Beta routing. +- Treat the current team ownership section in `PROJECT_MULTI_PC.txt` as authoritative for TEAM routing. Required pre-change report: - Codex must report instruction compliance as `PASS` or `FAIL` before making file changes. -- The report must include branch, clean status, PR owner, PR parity, implementation path, validation scope, required report list, and ZIP requirement. +- The report must include branch, clean status, PR TEAM owner, implementation path, validation scope, required report list, and ZIP requirement. - Any `FAIL` is a hard stop unless the PR explicitly scopes branch audit or recovery documentation without implementation. Hard stops before changes: - If the current branch is not `main`, HARD STOP. - If the repository is not clean before the PR branch is created, HARD STOP. -- If the PR owner does not match the Team Alpha / Team Beta ownership map in `PROJECT_MULTI_PC.txt`, HARD STOP. -- If the PR number parity does not match the assigned machine in `PROJECT_MULTI_PC.txt`, HARD STOP. +- If the PR name does not include a required TEAM token, HARD STOP. +- If the PR TEAM owner does not match the team ownership map in `PROJECT_MULTI_PC.txt`, HARD STOP. - If the PR asks for implementation and the implementation path is wrong, HARD STOP. - If a PR asks for functional parity and only placeholder-only work is possible, HARD STOP and report the missing source or blocker. - If scoped validation is skipped without a documented reason, HARD STOP. diff --git a/docs_build/dev/PROJECT_MULTI_PC.txt b/docs_build/dev/PROJECT_MULTI_PC.txt index 7d2a078ef..1f0ff3eb1 100644 --- a/docs_build/dev/PROJECT_MULTI_PC.txt +++ b/docs_build/dev/PROJECT_MULTI_PC.txt @@ -22,7 +22,7 @@ Requirements Acceptance Criteria Dependencies Priority -Owner (Team Alpha / Team Beta) +Owner (Team Alpha / Team Beta / Team Gamma) Recommended Workstream Split Instead of arbitrary splits, split by Creator journey. @@ -451,23 +451,35 @@ That is probably the fastest path to doubling throughput without creating chaos. ---------------------------------------------------------------------------------------- -Current Authoritative Multi-PC Gate +Current Authoritative Team Ownership Gate Codex must read this file before every PR execution. -Machine parity: +PR naming: -Team Alpha / Environment 1: -- Uses even-numbered PR sequence values. -- Example: `PR_26171_064-*`. +- PR names must include the owning TEAM token: + - `PR___<###>-` +- Branch names must mirror PR ownership: + - `pr/--<###>-` +- `TEAM` is required. +- Team ownership is independent of machine, workspace, laptop, desktop, or environment. +- Do not infer PR ownership from PR number parity or current machine. -Team Beta / Environment 2: -- Uses odd-numbered PR sequence values. -- Example: `PR_26171_063-*`. +Current examples: +- `PR_26171_ALPHA_065-message-studio-parent-child-table-foundation` +- `PR_26171_BETA_069-message-tts-profile-contract-alignment` +- `PR_26171_GAMMA_071-main-merge-conflict-recovery` +- `pr/26171-ALPHA-065-message-studio-parent-child-table-foundation` +- `pr/26171-BETA-069-message-tts-profile-contract-alignment` +- `pr/26171-GAMMA-071-main-merge-conflict-recovery` + +Historical examples: +- Older PC/LAPTOP, desktop/laptop, workspace, environment, and machine-parity examples are historical only. +- Older parity-only examples such as `PR_26171_064-*` and `PR_26171_063-*` are historical only. Owner map: -Team Alpha / Environment 1 owns Creator Journey work: +Team Alpha owns Creator Journey work: - Game Journey - Game Hub - Idea @@ -483,7 +495,7 @@ Team Alpha / Environment 1 owns Creator Journey work: - Game Design - Game Crew -Team Beta / Environment 2 owns Content Creation and asset/publishing work: +Team Beta owns Content Creation and asset/publishing work: - Graphics - Toolbox images - Audio @@ -496,17 +508,29 @@ Team Beta / Environment 2 owns Content Creation and asset/publishing work: - Community - Arcade +Team Gamma owns governance, recovery, diagnostics, and instruction-hardening work: +- PR naming governance +- Git workflow governance +- Recovery reports +- Workspace recovery +- Main merge conflict recovery +- Diagnostics +- Instruction enforcement +- Static docs governance + Governance, recovery, diagnostics, and instruction-hardening PRs: -- Follow PR number parity unless Master Control explicitly assigns an owner. +- Use the TEAM token assigned by Master Control. - Must not implement tool/runtime work from the opposite owner. -- Must document owner/parity compliance in the PR report. +- Must document TEAM ownership compliance in the PR report. +- Recovery reports must include TEAM ownership. Stable and merge approval: -- Stable promotion and merge approval are controlled by the assigned Team Alpha or Team Beta owner. +- Stable promotion and merge approval are controlled by the assigned Team Alpha, Team Beta, or Team Gamma owner. - Master Control may recommend sequencing, but Codex must not merge or mark stable without explicit owner approval for the affected workstream. Hard stop rules: -- If the PR number parity does not match the current machine, stop before changes. -- If the PR scope belongs to the other machine owner, stop before changes. -- If the PR crosses Team Alpha and Team Beta ownership, stop and require Master Control to split or assign the work. +- If the PR name does not include a TEAM token, stop before changes. +- If the TEAM token does not match the owner map or explicit Master Control assignment, stop before changes. +- If the PR scope belongs to another TEAM owner, stop before changes. +- If the PR crosses multiple team ownership areas, stop and require Master Control to split or assign the work. - If the requested implementation path conflicts with the active owner path, stop before changes. diff --git a/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-manual-validation-notes.md b/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-manual-validation-notes.md new file mode 100644 index 000000000..bde715f6b --- /dev/null +++ b/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-manual-validation-notes.md @@ -0,0 +1,17 @@ +# PR_26171_ALPHA_075-team-based-pr-naming Manual Validation Notes + +Generated: 2026-06-20T21:34:35.616Z + +## TEAM Ownership + +- TEAM owner: ALPHA + +## Manual Review + +- Confirmed PROJECT_INSTRUCTIONS.md documents the required TEAM token in PR names. +- Confirmed PROJECT_INSTRUCTIONS.md documents branch names mirroring PR ownership. +- Confirmed PROJECT_MULTI_PC.txt makes team ownership independent of machine, workspace, laptop, desktop, and environment. +- Confirmed older PC/LAPTOP and parity examples are marked historical only. +- Confirmed recovery reports are required to include TEAM ownership. + +No browser or runtime validation was required because this PR is docs/static only. diff --git a/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-validation.md b/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-validation.md new file mode 100644 index 000000000..bf7d709b2 --- /dev/null +++ b/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-validation.md @@ -0,0 +1,34 @@ +# PR_26171_ALPHA_075-team-based-pr-naming Validation + +Generated: 2026-06-20T21:34:35.616Z + +## TEAM Ownership + +- TEAM owner: ALPHA +- Validation scope: docs/static validation only + +## Commands + +```text +git diff --check +``` + +## Results + +- Initial docs diff check: PASS + +Output: + +```text +warning: in the working copy of 'docs_build/dev/reports/codex_review.diff', LF will be replaced by CRLF the next time Git touches it +``` + +## Final Validation + +- Final full diff check after report generation: PASS + +Output: + +```text +(no output) +``` diff --git a/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming.md b/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming.md new file mode 100644 index 000000000..e96be762d --- /dev/null +++ b/docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming.md @@ -0,0 +1,62 @@ +# PR_26171_ALPHA_075-team-based-pr-naming + +Generated: 2026-06-20T21:34:35.616Z + +## Purpose + +Replace machine-based PR naming examples with team-based ownership naming. + +## TEAM Ownership + +- TEAM owner: ALPHA +- Ownership source: docs_build/dev/PROJECT_MULTI_PC.txt +- Scope classification: static docs governance +- Machine/workspace/environment ownership: not used for PR naming or branch naming + +## Scope + +Updated only: + +- docs_build/dev/PROJECT_INSTRUCTIONS.md +- docs_build/dev/PROJECT_MULTI_PC.txt + +## Naming Contract + +Authoritative PR format: + +`PR___<###>-` + +Authoritative branch format: + +`pr/--<###>-` + +Required examples are documented for ALPHA, BETA, and GAMMA. + +## Instruction Compliance + +- Read PROJECT_INSTRUCTIONS.md first: PASS +- Read PROJECT_MULTI_PC.txt before edits: PASS +- Started from main: PASS +- Pulled latest main before branch: PASS +- Clean repo before branch: PASS +- Created branch: pr/26171-ALPHA-075-team-based-pr-naming +- TEAM token required: PASS +- TEAM ownership comes from PROJECT_MULTI_PC.txt: PASS +- Future reports include TEAM ownership: PASS + +## Git Workflow Status + +- Starting HEAD: b31b319983dc62a240ab7095b8430b7c6ed182bd +- origin/main at start: b31b319983dc62a240ab7095b8430b7c6ed182bd +- origin/main...HEAD after branch creation: 0 0 +- Push result: pending at report generation +- PR URL: pending at report generation +- Merge result: pending at report generation +- Final main commit: pending at report generation + +## Changed Files Before Report Generation + +```text +docs_build/dev/PROJECT_INSTRUCTIONS.md +docs_build/dev/PROJECT_MULTI_PC.txt +``` diff --git a/docs_build/dev/reports/codex_changed_files.txt b/docs_build/dev/reports/codex_changed_files.txt index 2f0436ffd..e067b2d67 100644 --- a/docs_build/dev/reports/codex_changed_files.txt +++ b/docs_build/dev/reports/codex_changed_files.txt @@ -1,17 +1,7 @@ -A docs_build/dev/reports/PR_26171_069-manual-validation-notes.md -A docs_build/dev/reports/PR_26171_069-message-tts-ownership-checklist.md -A docs_build/dev/reports/PR_26171_069-message-tts-profile-contract-alignment.md -A docs_build/dev/reports/PR_26171_069-parent-child-table-checklist.md -A docs_build/dev/reports/PR_26171_069-validation.md -A docs_build/pr/PR_26171_069-message-tts-profile-contract-alignment/APPLY_PR.md -A docs_build/pr/PR_26171_069-message-tts-profile-contract-alignment/BUILD_PR.md -A docs_build/pr/PR_26171_069-message-tts-profile-contract-alignment/PLAN_PR.md -M tests/playwright/tools/MessagesTool.spec.mjs -M tests/playwright/tools/TextToSpeechFunctional.spec.mjs -M tests/tools/Text2SpeechShell.test.mjs -M toolbox/messages/index.html -M toolbox/messages/message-tts-service-registry.js -M toolbox/messages/messages.js -M toolbox/text-to-speech/text2speech.js -M docs_build/dev/reports/codex_review.diff -M docs_build/dev/reports/codex_changed_files.txt +docs_build/dev/PROJECT_INSTRUCTIONS.md +docs_build/dev/PROJECT_MULTI_PC.txt +docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-manual-validation-notes.md +docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming-validation.md +docs_build/dev/reports/PR_26171_ALPHA_075-team-based-pr-naming.md +docs_build/dev/reports/codex_changed_files.txt +docs_build/dev/reports/codex_review.diff diff --git a/docs_build/dev/reports/codex_review.diff b/docs_build/dev/reports/codex_review.diff index 0cad4fde44e2a985e35270131d4e26aa26391a4c..7875a6689a36107ccb17883bb34894072e4240a1 100644 GIT binary patch literal 13831 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 literal 80482 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