chore(governance): approve PROP-vocabulary-contract + PROP-squad-routing - #678
chore(governance): approve PROP-vocabulary-contract + PROP-squad-routing#678Alencaf wants to merge 4 commits into
Conversation
…md ao atingir 5+
Estabelece regra operacional de governança de pipelines longos:
- Threshold: 5+ handoffs YAML para mesmo pipeline → MUST consolidar
- RUN-LOG.md vai em docs/stories/epics/{epic}/RUN-LOG.md (preferred)
- Handoff mais recente sempre fica individual (next session reads first)
- Originais arquivados em .aiox/handoffs/_archive/ (default)
- Preserva: contexto estratégico, ADRs, blockers resolvidos, schema changes
- Descarta: investigation steps, alternativas rejeitadas, tool sequences
Trigger desta sessão: pipeline meta-messaging Wave 1 → Wave 2 transition.
Mirror em business-ai-first/.claude/rules/handoff-consolidation.md (PR SynkraAI#59).
Atualiza CLAUDE.md (tabela de rules) com referência à nova regra.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
) Establishes formal AIOX framework R&D pipeline triggered by Wave 1.A correction in business-ai-first that exposed two systemic gaps: 1. No formal route for project-level audit findings to evolve framework 2. @aiox-master orchestrator has no triage.routing_matrix to consult specialized squads first when topic matches their domain ## What this PR adds ### audits/ - README.md — folder doctrine - c-dev-organization-2026-05-07.md — narrative audit of C:/dev workspace - promoted/AF-20260507-vocabulary-contract-failure.yaml — finding - promoted/AF-20260507-aiox-master-routing-gap.yaml — finding ### governance/ - README.md — folder index - evolution-pipeline.md — formal R&D pipeline spec (audit -> proposal -> Eliel approval -> PR) - squad-activation-strategy.md — conditional consult-squad-first routing - templates/audit-finding-tmpl.yaml — AuditFinding template - templates/framework-proposal-tmpl.yaml — FrameworkProposal template - proposals/README.md — proposal lifecycle doc - proposals/PROP-20260507-vocabulary-contract.yaml — pending Eliel approval - proposals/PROP-20260507-squad-routing-strategy.yaml — pending Eliel approval - patterns/README.md — pattern catalog (catalog scaffold) ## Why this matters Without the pipeline, every project re-discovers the same lessons, voice-clone squads stay dormant, claude-code-mastery never gets invoked from outside, and tokens burn on context redundancy. Eliel's diagnostic: "todos os plans criados cogitaram em nenhum momento a perfeita integração desses squads". The pipeline is the discipline; the routing matrix is the mechanism. ## What this PR does NOT do (deferred to follow-up PRs after approval) - Patch aiox-master.md to add triage block (separate PR per proposal approval) - Add aiox-core/hooks/migration-dictionary-guard.cjs (separate PR) - Add aiox-core/hooks/squad-suggestion-advisor.cjs (separate PR) - Constitution amendment Article VII (separate PR) This PR is governance-only. Implementation follows once Eliel signs the two pending proposals. ## Authority - Authors: @aiox-master (Orion) on Eliel's request - Approver of governance content: Eliel (sole orchestrator approver) - Reference: voice-clone formal opinions captured in business-ai-first ADR-DBOPS-V1-vocabulary-contract-failure.md Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Eliel approved both proposals on 2026-05-07T19:15:00Z: - PROP-20260507-vocabulary-contract: APPROVED Closes Akita's Article VII gap. Generalizes migration-dictionary-guard hook from business-ai-first project-local copy to framework. Prevents Wave 1.A failure mode (V1 reverted) in any future AIOX project. - PROP-20260507-squad-routing-strategy: APPROVED Adds triage.routing_matrix to @aiox-master. Advisory hook suggests squads (voice-clones, claude-code-mastery, audience-engine, db-inventory) by keyword match. Closes Eliel-declared squad integration gap. Implementation order: vocabulary-contract first, then squad-routing references Article VII once formalized. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
@Alencaf is attempting to deploy a commit to the SINKRA - AIOX Team on Vercel. A member of the Team first needs to authorize it. |
There was a problem hiding this comment.
Welcome to aiox-core! Thanks for your first pull request.
What happens next?
- Automated checks will run on your PR
- A maintainer will review your changes
- Once approved, we'll merge your contribution!
PR Checklist:
- Tests pass (
npm test) - Linting passes (
npm run lint) - Commit messages follow Conventional Commits
Thanks for contributing!
WalkthroughThis pull request establishes the AIOX framework governance infrastructure: a formal evolution pipeline that discovers gaps via audits, proposes framework solutions via governance proposals, approves them through a single decision authority, and rolls out approved patterns across consumer projects. The changes consolidate configuration into Portuguese, define audit-driven discovery workflows, and operationalize two approved proposals (squad routing strategy and vocabulary contract pattern). ChangesAIOX Framework Governance Infrastructure & Evolution Pipeline
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 12
🧹 Nitpick comments (6)
.claude/CLAUDE.md (1)
38-45: ⚡ Quick winSpecify languages for both fenced code blocks.
Both blocks are missing a language tag and trigger MD040.
Suggested fix
-``` +```text *draft / *create-story → `@sm` ... *push → `@devops`-
+text
aiox-core/
├── .aiox-core/ ← core do framework (tasks, agents, infrastructure)
...
└── .env ← secrets locais (nunca commitar)Also applies to: 86-96
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/CLAUDE.md around lines 38 - 45, The two fenced code blocks (the one beginning with "*draft / *create-story → `@sm`" and the one showing the "aiox-core/" directory tree) are missing language tags and trigger MD040; add a language identifier like "text" to both opening fences (e.g., replace ``` with ```text) and do the same for the additional block referenced at lines 86–96 so all three fenced blocks include a language tag..env.example (1)
46-48: ⚡ Quick winReorder keys to satisfy dotenv-linter ordering checks.
Current key order triggers
UnorderedKeywarnings; sorting these lines removes lint churn in CI.Suggested fix
-SUPABASE_URL= SUPABASE_ANON_KEY= SUPABASE_SERVICE_ROLE_KEY= +SUPABASE_URL= ... -NODE_ENV=development AIOX_VERSION=2.2.0 +NODE_ENV=developmentAlso applies to: 95-96
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.env.example around lines 46 - 48, Reorder the SUPABASE env keys so they satisfy dotenv-linter's alphabetical ordering: place SUPABASE_ANON_KEY before SUPABASE_SERVICE_ROLE_KEY and SUPABASE_URL (i.e., SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, SUPABASE_URL) and apply the same alphabetical ordering fix to the other SUPABASE key group mentioned (the block referenced around the later occurrence).governance/README.md (1)
15-30: ⚡ Quick winAdd a language tag to the layout code fence.
The fenced block has no language and triggers MD040.
Suggested fix
-``` +```text governance/ ├── README.md # this file ... └── framework-proposal-tmpl.yaml</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@governance/README.mdaround lines 15 - 30, The README's directory tree is in
a fenced code block without a language tag (triggering MD040); modify the
opening fence for that block in governance/README.md to include a language tag
(e.g., change "" to "text") so the block is recognized as plain text and
the linter warning is resolved; leave the block contents and the closing fence
intact.</details> </blockquote></details> <details> <summary>.claude/rules/handoff-consolidation.md (1)</summary><blockquote> `102-116`: _⚡ Quick win_ **Add a language identifier to the fenced code block.** The block starting at Line 102 is untyped; markdownlint flags this (MD040). <details> <summary>Suggested fix</summary> ```diff -``` +```text .aiox/handoffs/ ├── INDEX-meta-messaging-pipeline.md (refs RUN-LOG) ... └── RUN-LOG.md (waves 1-5 consolidated, narrative form) ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In @.claude/rules/handoff-consolidation.md around lines 102 - 116, The fenced
code block showing the handoff directory tree (starting with ".aiox/handoffs/")
in .claude/rules/handoff-consolidation.md is missing a language identifier; edit
that code fence to include a language tag (e.g.,text orplain) so the
block becomestext followed by the directory tree and closing, which
resolves the markdownlint MD040 warning.</details> </blockquote></details> <details> <summary>governance/templates/audit-finding-tmpl.yaml (1)</summary><blockquote> `37-41`: _💤 Low value_ **Consider enumerating allowed `kind` values in comments to prevent drift.** Both `AF-20260507-aiox-master-routing-gap.yaml` and `AF-20260507-vocabulary-contract-failure.yaml` already use kinds not shown here (`governance-doc`, `existing-pattern-source`, `voice-clone-finding`, `voice-clone-personas`, `handoff-contract`). Without a canonical list, the `kind` field will diverge across findings and become non-queryable. <details> <summary>🛠️ Proposed fix</summary> ```diff references: - - kind: ADR + - kind: ADR # ADR | code | hook | governance-doc | voice-clone-finding | handoff-contract | existing-pattern-source path: "" # e.g., docs/decisions/ADR-...md - # - kind: code + # - kind: <other-kind> # path: "" ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@governance/templates/audit-finding-tmpl.yaml` around lines 37 - 41, The template's references.kinds are not enumerated which allows divergent values; update the audit-finding template by adding a commented canonical list of allowed kind values directly above or beside the references block (referencing the references mapping and the kind field), e.g. list entries like ADR, governance-doc, existing-pattern-source, voice-clone-finding, voice-clone-personas, handoff-contract, code, etc., so authors must choose from the documented set; ensure the comment is clear and kept in the same YAML block so it’s visible when editing the template. ``` </details> </blockquote></details> <details> <summary>governance/squad-activation-strategy.md (1)</summary><blockquote> `95-95`: _💤 Low value_ **Add a language identifier to the two unlabeled fenced code blocks (markdownlint MD040).** Lines 95 (decision-tree pseudocode) and 218 (cross-pollination ASCII flow) trigger `MD040`. `text` is a safe default; `mermaid` could be considered for the flow if you want it rendered. <details> <summary>📝 Proposed fix</summary> ```diff -### Decision tree (pseudocode) - -``` +### Decision tree (pseudocode) + +```text on user message: ``` ```diff -### Flow - -``` +### Flow + +```text [business-ai-first agent learns X about Claude Code] ``` </details> Also applies to: 218-218 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@governance/squad-activation-strategy.mdat line 95, The two unlabeled fenced
code blocks under the "Decision tree (pseudocode)" block (the snippet starting
with "on user message:") and the "Flow" block (the ASCII flow starting with
"[business-ai-first agent learns X about Claude Code]") need language
identifiers to satisfy markdownlint MD040; update their opening fences to
include a language token such as "text" (or "mermaid" for the flow if you want
rendering) so the blocks readtext andtext (or ```mermaid for the flow)
respectively.</details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.Inline comments:
In @.claude/commands/AIOX/stories/story-7.1.1.md:
- Line 6: The story's front-matter/status line "Status: ✅ Done" incorrectly
marks the story complete despite two unchecked acceptance criteria; change
"Status: ✅ Done" to a non-complete state (e.g., "Status: ⌛ In Progress" or
"Status: To Do") and ensure the acceptance criteria checkboxes corresponding to
the unchecked AC items remain unchecked; update any duplicate status entries
that also reference the same ACs (the noted "Also applies to: 35-37") so the
status accurately reflects remaining acceptance criteria.- Line 36: The checklist contains contradictory dependency notes about Bun on
the lines that read "cd C:\dev\aiox-dashboard && npm installcompleta sem
erros (bun não instalado, npm usado como fallback)" and the opposing note at
line 60; pick one factual state and make both entries identical: either state
that Bun is not installed and npm was used as a fallback, or state that Bun is
installed and used — update both occurrences of that checklist item (the two
lines with the samecd C:\dev\aiox-dashboard && npm installtext) so the
dependency note is consistent across the story.In
@audits/c-dev-organization-2026-05-07.md:
- Around line 124-147: The Markdown code block for the directory tree is missing
a language specifier; update the triple-backtick fence that contains "C:/dev/"
to include a language (e.g.,text) so the block becomestext followed by
the directory listing and closing ``` to satisfy MD040; ensure you modify the
specific code block that starts with C:/dev/ in the diff.In
@audits/promoted/AF-20260507-vocabulary-contract-failure.yaml:
- Line 58: The proposed_disposition value references the audit finding artifact
ID instead of the sister proposal; update the string in proposed_disposition
that currently reads "Sister proposal: AF-20260507-aiox-master-routing-gap" to
the correct proposal artifact "Sister proposal:
PROP-20260507-squad-routing-strategy" so governance cross-references resolve
correctly.In
@audits/README.md:
- Around line 9-17: The fenced code block in README.md lacks a language
specifier and triggers MD040; update the opening fence for the tree block (the
triple-backtick that starts the block in README.md) to include a language (e.g.,
changetotext or ```txt) so the block is a labeled code fence and the
linter no longer flags it.In
@governance/evolution-pipeline.md:
- Around line 15-17: Three fenced code blocks in
governance/evolution-pipeline.md are missing language specifiers (MD040); update
each opening fence to include a language (e.g., "text") for the blocks
containing the lines "Project audit → Finding → Proposal → Eliel approval →
aiox-core PR → Distribution", the block that begins with "┌───..." and the block
containing "aiox-core/". Edit those three code fences so their opening backticks
become triple-backticks plus the language tag (e.g., ```text) to satisfy the
linter.- Line 163: The FrameworkProposal template's eliel_decision enum uses
APPPROVE/REJECT (singular) which is inconsistent with proposal instances; update
the enum values for eliel_decision on the FrameworkProposal template to use the
canonical past-tense values: "PENDING|APPROVED|REJECTED|NEEDS_REVISION" (ensure
you update the FrameworkProposal definition that declares eliel_decision and any
related validation/usage that expects the old strings).In
@governance/patterns/README.md:
- Around line 11-12: The table rows for "Vocabulary Contract Store"
(PROP-20260507-vocabulary-contract.yaml) and "Squad Activation Routing"
(PROP-20260507-squad-routing-strategy.yaml) are still marked PENDING/Proposed;
update those catalog entries to reflect the approved state (e.g., change status
column to APPROVED and the lifecycle column to Accepted/Approved and remove
"(PENDING)" if present) so the README matches the PR's recorded approvals; edit
the two lines in governance/patterns/README.md accordingly.In
@governance/proposals/README.md:
- Around line 9-15: Update the fenced code block in
governance/proposals/README.md to include a language specifier (e.g., text or
plaintext) so the linter MD040 is satisfied; locate the tree-style block showing
"proposals/ ├── README.md ..." and change the opening backticks to include the
specifier (for example, ```text) and save.- Around line 20-22: The governance status values are inconsistent: change the
README proposal status entry from "APPROVE" to "APPROVED", ensure the
eliel_decision field in PROP-20260507-squad-routing-strategy.yaml uses
"APPROVED" (the eliel_decision key), and update the eliel_decision enum in the
evolution-pipeline document to use the single canonical value "APPROVED"
(replacing any "APPROVE" occurrence) so all three locations agree.In
@governance/squad-activation-strategy.md:
- Line 7: Remove the stale "(to be created)" parenthetical from the Source
finding line that references
AF-20260507-aiox-master-routing-gap
in the squad-activation-strategy content; edit the line so it reads only the
link/name (e.g., "Source finding:
AF-20260507-aiox-master-routing-gap")
without the extra note.In
@governance/templates/framework-proposal-tmpl.yaml:
- Line 8: The template uses the decision enum value "APPROVE" which must be
changed to "APPROVED" to match the approved-state contract; locate every
occurrence of the string literal "APPROVE" in the framework-proposal-tmpl.yaml
(including the other occurrence noted) and replace it with "APPROVED", and
update any nearby comment text that references "APPROVE" so the template and its
documentation consistently use "APPROVED".
Nitpick comments:
In @.claude/CLAUDE.md:
- Around line 38-45: The two fenced code blocks (the one beginning with "*draft
/ *create-story →@sm" and the one showing the "aiox-core/" directory tree) are
missing language tags and trigger MD040; add a language identifier like "text"
to both opening fences (e.g., replacewithtext) and do the same for the
additional block referenced at lines 86–96 so all three fenced blocks include a
language tag.In @.claude/rules/handoff-consolidation.md:
- Around line 102-116: The fenced code block showing the handoff directory tree
(starting with ".aiox/handoffs/") in .claude/rules/handoff-consolidation.md is
missing a language identifier; edit that code fence to include a language tag
(e.g.,text orplain) so the block becomestext followed by the directory tree and closing, which resolves the markdownlint MD040 warning.In @.env.example:
- Around line 46-48: Reorder the SUPABASE env keys so they satisfy
dotenv-linter's alphabetical ordering: place SUPABASE_ANON_KEY before
SUPABASE_SERVICE_ROLE_KEY and SUPABASE_URL (i.e., SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY, SUPABASE_URL) and apply the same alphabetical
ordering fix to the other SUPABASE key group mentioned (the block referenced
around the later occurrence).In
@governance/README.md:
- Around line 15-30: The README's directory tree is in a fenced code block
without a language tag (triggering MD040); modify the opening fence for that
block in governance/README.md to include a language tag (e.g., change "" to "text") so the block is recognized as plain text and the linter warning is
resolved; leave the block contents and the closing fence intact.In
@governance/squad-activation-strategy.md:
- Line 95: The two unlabeled fenced code blocks under the "Decision tree
(pseudocode)" block (the snippet starting with "on user message:") and the
"Flow" block (the ASCII flow starting with "[business-ai-first agent learns X
about Claude Code]") need language identifiers to satisfy markdownlint MD040;
update their opening fences to include a language token such as "text" (or
"mermaid" for the flow if you want rendering) so the blocks readtext andtext (or ```mermaid for the flow) respectively.In
@governance/templates/audit-finding-tmpl.yaml:
- Around line 37-41: The template's references.kinds are not enumerated which
allows divergent values; update the audit-finding template by adding a commented
canonical list of allowed kind values directly above or beside the references
block (referencing the references mapping and the kind field), e.g. list entries
like ADR, governance-doc, existing-pattern-source, voice-clone-finding,
voice-clone-personas, handoff-contract, code, etc., so authors must choose from
the documented set; ensure the comment is clear and kept in the same YAML block
so it’s visible when editing the template.</details> <details> <summary>🪄 Autofix (Beta)</summary> Fix all unresolved CodeRabbit comments on this PR: - [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended) - [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes </details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: Path: .coderabbit.yaml **Review profile**: CHILL **Plan**: Pro **Run ID**: `a860d5b2-e028-4a83-9e77-e16435c19146` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between bdaaeec34024d0c89806124aaf1427e0eb721682 and d24f21427094a1f452f57e1ffa7ef18d5e73a2a3. </details> <details> <summary>⛔ Files ignored due to path filters (1)</summary> * `package-lock.json` is excluded by `!**/package-lock.json` </details> <details> <summary>📒 Files selected for processing (18)</summary> * `.claude/CLAUDE.md` * `.claude/commands/AIOX/stories/story-7.1.1.md` * `.claude/rules/handoff-consolidation.md` * `.claude/settings.json` * `.env.example` * `audits/README.md` * `audits/c-dev-organization-2026-05-07.md` * `audits/promoted/AF-20260507-aiox-master-routing-gap.yaml` * `audits/promoted/AF-20260507-vocabulary-contract-failure.yaml` * `governance/README.md` * `governance/evolution-pipeline.md` * `governance/patterns/README.md` * `governance/proposals/PROP-20260507-squad-routing-strategy.yaml` * `governance/proposals/PROP-20260507-vocabulary-contract.yaml` * `governance/proposals/README.md` * `governance/squad-activation-strategy.md` * `governance/templates/audit-finding-tmpl.yaml` * `governance/templates/framework-proposal-tmpl.yaml` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
| **Story ID:** 7.1.1 | ||
| **Epic:** Epic-7 - Dashboard Workspace Integration | ||
| **Wave:** Wave 1 (Foundation) | ||
| **Status:** ✅ Done |
There was a problem hiding this comment.
Status: ✅ Done conflicts with pending acceptance criteria.
With unchecked ACs at Line 35 and Line 37, this should not be marked done yet; it can mislead planning/reporting.
Also applies to: 35-37
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/commands/AIOX/stories/story-7.1.1.md at line 6, The story's
front-matter/status line "Status: ✅ Done" incorrectly marks the story complete
despite two unchecked acceptance criteria; change "Status: ✅ Done" to a
non-complete state (e.g., "Status: ⌛ In Progress" or "Status: To Do") and ensure
the acceptance criteria checkboxes corresponding to the unchecked AC items
remain unchecked; update any duplicate status entries that also reference the
same ACs (the noted "Also applies to: 35-37") so the status accurately reflects
remaining acceptance criteria.
| - [x] `C:\dev\.gitignore` existe cobrindo `node_modules`, `.env`, lock files dos dois projetos | ||
| - [x] `C:\dev\aiox-dashboard\.env.local` criado a partir do `.env.example` do dashboard | ||
| - [ ] Variáveis Supabase alinhadas entre `aiox-core` e `aiox-dashboard` — **pendente: preencher credenciais** | ||
| - [x] `cd C:\dev\aiox-dashboard && npm install` completa sem erros (bun não instalado, npm usado como fallback) |
There was a problem hiding this comment.
Dependency note is contradictory (bun not installed vs Bun installed).
Line 36 and Line 60 state opposite conditions; please keep one factual state to avoid operator confusion.
Also applies to: 60-60
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/commands/AIOX/stories/story-7.1.1.md at line 36, The checklist
contains contradictory dependency notes about Bun on the lines that read "`cd
C:\dev\aiox-dashboard && npm install` completa sem erros (bun não instalado, npm
usado como fallback)" and the opposing note at line 60; pick one factual state
and make both entries identical: either state that Bun is not installed and npm
was used as a fallback, or state that Bun is installed and used — update both
occurrences of that checklist item (the two lines with the same `cd
C:\dev\aiox-dashboard && npm install` text) so the dependency note is consistent
across the story.
| ``` | ||
| C:/dev/ | ||
| ├── CLAUDE.md # workspace root config (keep) | ||
| ├── .gitignore # workspace gitignore (keep) | ||
| ├── aiox-core/ # framework canonical | ||
| │ ├── audits/ # cross-project audit reports (NEW — this file lives here) | ||
| │ ├── governance/ # evolution pipeline + handoff types (NEW) | ||
| │ ├── docs/ | ||
| │ │ ├── architecture/cross-project/ # moved from C:/dev/architecture | ||
| │ │ ├── research/notebooklm/ # moved from C:/dev/AIOX-*.md | ||
| │ │ └── guides/token-economy/ # moved from C:/dev/GUIA-*.md | ||
| │ ├── infrastructure/docker/ # moved from C:/dev/docker (if framework-shared) | ||
| │ └── archive/ # for legacy assets that we don't want to delete | ||
| │ └── legacy-etl/ # if kommo-sync becomes legacy | ||
| ├── business-ai-first/ # project (active epic CDM) | ||
| │ ├── docs/research/kommo-forms-pre-deactivation/ # moved from loose Forms_*.png | ||
| │ └── db-inventory/exports/ # moved from loose [CM] *.csv | ||
| ├── aiox-dashboard/ # AIOS Platform UI (confirm active) | ||
| ├── cadastro-rapido/ # Next.js portal (confirm active) | ||
| ├── cdm-portal/ # confirm if active or delete | ||
| ├── db-inventory/ # cross-project DB asset (keep at root, add OWNERSHIP.md) | ||
| └── archive/ # workspace-level archive for things we want to keep but not active | ||
| └── kommo-sync/ # if legacy | ||
| ``` |
There was a problem hiding this comment.
Add a language specifier to the proposed directory-structure code block (MD040).
🛠️ Proposed fix
-```
+```text
C:/dev/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ``` | |
| C:/dev/ | |
| ├── CLAUDE.md # workspace root config (keep) | |
| ├── .gitignore # workspace gitignore (keep) | |
| ├── aiox-core/ # framework canonical | |
| │ ├── audits/ # cross-project audit reports (NEW — this file lives here) | |
| │ ├── governance/ # evolution pipeline + handoff types (NEW) | |
| │ ├── docs/ | |
| │ │ ├── architecture/cross-project/ # moved from C:/dev/architecture | |
| │ │ ├── research/notebooklm/ # moved from C:/dev/AIOX-*.md | |
| │ │ └── guides/token-economy/ # moved from C:/dev/GUIA-*.md | |
| │ ├── infrastructure/docker/ # moved from C:/dev/docker (if framework-shared) | |
| │ └── archive/ # for legacy assets that we don't want to delete | |
| │ └── legacy-etl/ # if kommo-sync becomes legacy | |
| ├── business-ai-first/ # project (active epic CDM) | |
| │ ├── docs/research/kommo-forms-pre-deactivation/ # moved from loose Forms_*.png | |
| │ └── db-inventory/exports/ # moved from loose [CM] *.csv | |
| ├── aiox-dashboard/ # AIOS Platform UI (confirm active) | |
| ├── cadastro-rapido/ # Next.js portal (confirm active) | |
| ├── cdm-portal/ # confirm if active or delete | |
| ├── db-inventory/ # cross-project DB asset (keep at root, add OWNERSHIP.md) | |
| └── archive/ # workspace-level archive for things we want to keep but not active | |
| └── kommo-sync/ # if legacy | |
| ``` |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 124-124: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@audits/c-dev-organization-2026-05-07.md` around lines 124 - 147, The Markdown
code block for the directory tree is missing a language specifier; update the
triple-backtick fence that contains "C:/dev/" to include a language (e.g.,
```text) so the block becomes ```text followed by the directory listing and
closing ``` to satisfy MD040; ensure you modify the specific code block that
starts with C:/dev/ in the diff.
| - "Promote business-ai-first/.claude/hooks/migration-dictionary-guard.cjs → aiox-core/hooks/ as framework hook" | ||
| - "Add Article VII (Vocabulary Contract) to .aiox-core/constitution.md" | ||
| - "Document Vocabulary Contract pattern in aiox-core/governance/patterns/vocabulary-store.md" | ||
| - "Sister proposal: AF-20260507-aiox-master-routing-gap" |
There was a problem hiding this comment.
Wrong artifact ID in proposed_disposition — references an audit finding, not the sister proposal.
Line 58 reads "Sister proposal: AF-20260507-aiox-master-routing-gap", but AF-20260507-aiox-master-routing-gap is the audit finding; the corresponding proposal is PROP-20260507-squad-routing-strategy. Governance trail navigation depends on correct cross-references.
🛠️ Proposed fix
- - "Sister proposal: AF-20260507-aiox-master-routing-gap"
+ - "Sister proposal: PROP-20260507-squad-routing-strategy"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - "Sister proposal: AF-20260507-aiox-master-routing-gap" | |
| - "Sister proposal: PROP-20260507-squad-routing-strategy" |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@audits/promoted/AF-20260507-vocabulary-contract-failure.yaml` at line 58, The
proposed_disposition value references the audit finding artifact ID instead of
the sister proposal; update the string in proposed_disposition that currently
reads "Sister proposal: AF-20260507-aiox-master-routing-gap" to the correct
proposal artifact "Sister proposal: PROP-20260507-squad-routing-strategy" so
governance cross-references resolve correctly.
| ``` | ||
| audits/ | ||
| ├── README.md # this file | ||
| ├── <audit-narrative>.md # human-readable audit reports (e.g., c-dev-organization-2026-05-07.md) | ||
| ├── promoted/ # AuditFindings flagged framework_candidate: true | ||
| │ └── AF-<YYYYMMDD>-<slug>.yaml | ||
| └── archived/ # AuditFindings that stayed scope-bound (project-only) | ||
| └── AF-<YYYYMMDD>-<slug>.yaml | ||
| ``` |
There was a problem hiding this comment.
Add language specifier to the fenced code block (MD040).
🛠️ Proposed fix
-```
+```text
audits/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ``` | |
| audits/ | |
| ├── README.md # this file | |
| ├── <audit-narrative>.md # human-readable audit reports (e.g., c-dev-organization-2026-05-07.md) | |
| ├── promoted/ # AuditFindings flagged framework_candidate: true | |
| │ └── AF-<YYYYMMDD>-<slug>.yaml | |
| └── archived/ # AuditFindings that stayed scope-bound (project-only) | |
| └── AF-<YYYYMMDD>-<slug>.yaml | |
| ``` |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@audits/README.md` around lines 9 - 17, The fenced code block in README.md
lacks a language specifier and triggers MD040; update the opening fence for the
tree block (the triple-backtick that starts the block in README.md) to include a
language (e.g., change ``` to ```text or ```txt) so the block is a labeled code
fence and the linter no longer flags it.
| | Vocabulary Contract Store | `PROP-20260507-vocabulary-contract.yaml` (PENDING) | Proposed | (created on APPROVE) | | ||
| | Squad Activation Routing | `PROP-20260507-squad-routing-strategy.yaml` (PENDING) | Proposed | [`../squad-activation-strategy.md`](../squad-activation-strategy.md) | |
There was a problem hiding this comment.
Update catalog statuses to reflect approved proposals.
This table still marks both proposals as PENDING/Proposed, but the PR objective records them as approved. Keep the catalog in sync to prevent governance state drift.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@governance/patterns/README.md` around lines 11 - 12, The table rows for
"Vocabulary Contract Store" (`PROP-20260507-vocabulary-contract.yaml`) and
"Squad Activation Routing" (`PROP-20260507-squad-routing-strategy.yaml`) are
still marked PENDING/Proposed; update those catalog entries to reflect the
approved state (e.g., change status column to APPROVED and the lifecycle column
to Accepted/Approved and remove "(PENDING)" if present) so the README matches
the PR's recorded approvals; edit the two lines in governance/patterns/README.md
accordingly.
| ``` | ||
| proposals/ | ||
| ├── README.md # this file | ||
| ├── PROP-<YYYYMMDD>-<slug>.yaml # active proposals (PENDING / APPROVED / NEEDS_REVISION) | ||
| └── archive/ # rejected or superseded proposals | ||
| └── PROP-<YYYYMMDD>-<slug>.yaml | ||
| ``` |
There was a problem hiding this comment.
Add a language specifier to the fenced code block.
The linter flags this as MD040. Using text or plaintext satisfies the rule without misrepresenting the content.
🛠️ Proposed fix
-```
+```text
proposals/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ``` | |
| proposals/ | |
| ├── README.md # this file | |
| ├── PROP-<YYYYMMDD>-<slug>.yaml # active proposals (PENDING / APPROVED / NEEDS_REVISION) | |
| └── archive/ # rejected or superseded proposals | |
| └── PROP-<YYYYMMDD>-<slug>.yaml | |
| ``` |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 9-9: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@governance/proposals/README.md` around lines 9 - 15, Update the fenced code
block in governance/proposals/README.md to include a language specifier (e.g.,
text or plaintext) so the linter MD040 is satisfied; locate the tree-style block
showing "proposals/ ├── README.md ..." and change the opening backticks to
include the specifier (for example, ```text) and save.
| - **APPROVE** — Eliel signed; implementer can open PR in aiox-core | ||
| - **REJECT** — Eliel declined; proposal moves to `archive/` with rationale | ||
| - **NEEDS_REVISION** — Eliel requested changes; proposer addresses and resubmits |
There was a problem hiding this comment.
APPROVE vs APPROVED — schema enum mismatch across the governance system.
The status defined here is APPROVE, but PROP-20260507-squad-routing-strategy.yaml (line 68) uses eliel_decision: "APPROVED", and the same mismatch propagates to the eliel_decision enum in governance/evolution-pipeline.md (line 163). All three locations need to agree on a single canonical value before any YAML validation or tooling is layered on top.
🛠️ Proposed fix (align on `APPROVED`)
- - **APPROVE** — Eliel signed; implementer can open PR in aiox-core
- - **REJECT** — Eliel declined; proposal moves to `archive/` with rationale
- - **NEEDS_REVISION** — Eliel requested changes; proposer addresses and resubmits
+ - **APPROVED** — Eliel signed; implementer can open PR in aiox-core
+ - **REJECTED** — Eliel declined; proposal moves to `archive/` with rationale
+ - **NEEDS_REVISION** — Eliel requested changes; proposer addresses and resubmitsApply the matching correction to governance/evolution-pipeline.md line 163:
- eliel_decision: "PENDING|APPROVE|REJECT|NEEDS_REVISION"
+ eliel_decision: "PENDING|APPROVED|REJECTED|NEEDS_REVISION"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - **APPROVE** — Eliel signed; implementer can open PR in aiox-core | |
| - **REJECT** — Eliel declined; proposal moves to `archive/` with rationale | |
| - **NEEDS_REVISION** — Eliel requested changes; proposer addresses and resubmits | |
| - **APPROVED** — Eliel signed; implementer can open PR in aiox-core | |
| - **REJECTED** — Eliel declined; proposal moves to `archive/` with rationale | |
| - **NEEDS_REVISION** — Eliel requested changes; proposer addresses and resubmits |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@governance/proposals/README.md` around lines 20 - 22, The governance status
values are inconsistent: change the README proposal status entry from "APPROVE"
to "APPROVED", ensure the eliel_decision field in
PROP-20260507-squad-routing-strategy.yaml uses "APPROVED" (the eliel_decision
key), and update the eliel_decision enum in the evolution-pipeline document to
use the single canonical value "APPROVED" (replacing any "APPROVE" occurrence)
so all three locations agree.
| **Date:** 2026-05-07 | ||
| **Author:** @aiox-master (Orion) | ||
| **Approval gate:** Eliel M. Alencar | ||
| **Source finding:** [`AF-20260507-aiox-master-routing-gap`](../audits/promoted/AF-20260507-aiox-master-routing-gap.yaml) (to be created) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Confirm the audit file referenced by the link actually exists on this branch.
fd -t f 'AF-20260507-aiox-master-routing-gap.yaml'Repository: SynkraAI/aiox-core
Length of output: 119
Remove stale "(to be created)" annotation from source-finding link.
The audit file audits/promoted/AF-20260507-aiox-master-routing-gap.yaml already exists in the repository, so the "(to be created)" parenthetical is misleading. Remove it.
Proposed fix
-**Source finding:** [`AF-20260507-aiox-master-routing-gap`](../audits/promoted/AF-20260507-aiox-master-routing-gap.yaml) (to be created)
+**Source finding:** [`AF-20260507-aiox-master-routing-gap`](../audits/promoted/AF-20260507-aiox-master-routing-gap.yaml)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| **Source finding:** [`AF-20260507-aiox-master-routing-gap`](../audits/promoted/AF-20260507-aiox-master-routing-gap.yaml) (to be created) | |
| **Source finding:** [`AF-20260507-aiox-master-routing-gap`](../audits/promoted/AF-20260507-aiox-master-routing-gap.yaml) |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@governance/squad-activation-strategy.md` at line 7, Remove the stale "(to be
created)" parenthetical from the Source finding line that references
[`AF-20260507-aiox-master-routing-gap`](../audits/promoted/AF-20260507-aiox-master-routing-gap.yaml)
in the squad-activation-strategy content; edit the line so it reads only the
link/name (e.g., "**Source finding:**
[`AF-20260507-aiox-master-routing-gap`](../audits/promoted/AF-20260507-aiox-master-routing-gap.yaml)")
without the extra note.
| # 1. Copy this file to aiox-core/governance/proposals/PROP-<YYYYMMDD>-<slug>.yaml | ||
| # 2. Fill all fields. Reference source AuditFinding by ID. | ||
| # 3. Submit to Eliel for approval. | ||
| # 4. On APPROVE: implementer opens PR in aiox-core; fill implementation.* fields. |
There was a problem hiding this comment.
Align decision enum with the approved-state contract (APPROVED).
The template currently encodes APPROVE, while this PR’s governance contract uses APPROVED. This will create state drift across proposal YAMLs and any automation that parses decision values.
Suggested fix
-# 4. On APPROVE: implementer opens PR in aiox-core; fill implementation.* fields.
+# 4. On APPROVED: implementer opens PR in aiox-core; fill implementation.* fields.
...
- eliel_decision: "PENDING" # PENDING | APPROVE | REJECT | NEEDS_REVISION
+ eliel_decision: "PENDING" # PENDING | APPROVED | REJECT | NEEDS_REVISIONAlso applies to: 48-48
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@governance/templates/framework-proposal-tmpl.yaml` at line 8, The template
uses the decision enum value "APPROVE" which must be changed to "APPROVED" to
match the approved-state contract; locate every occurrence of the string literal
"APPROVE" in the framework-proposal-tmpl.yaml (including the other occurrence
noted) and replace it with "APPROVED", and update any nearby comment text that
references "APPROVE" so the template and its documentation consistently use
"APPROVED".
|
Superseded by #681. I rebased the useful governance work from this PR on current main, addressed the review feedback locally, validated it with lint/typecheck/manifest/semantic-lint/full Jest, and opened the replacement PR from the main repository branch to avoid force-pushing over the contributor fork history. |
Supersedes #678. Local validation passed: lint, typecheck, validate:manifest, targeted ownership test, and full Jest suite.
Supersedes SynkraAI#678. Local validation passed: lint, typecheck, validate:manifest, targeted ownership test, and full Jest suite.
Summary
Records Eliel's approval (2026-05-07T19:15:00Z) on two governance proposals from the EPIC-MVP-CDM-CADASTRO Wave 1.A correction session:
This PR ONLY records approval metadata. Implementation PRs follow per each proposal's
rollout_plan.PROP-vocabulary-contract — APPROVED
Generalizes
migration-dictionary-guard.cjshook from business-ai-first project-local copy into the AIOX framework (L1+L2). Adds Article VII (Vocabulary Contract) to the Constitution. Closes Akita's anti-vibecoding gap surfaced by Wave 1.A failure (V1 reverted due to drift between domain values and CHECK constraints).Rationale: additive, low risk, prevents recurrence in any future AIOX project touching domain enums. 3-4h cost recovers in first-future-project savings.
PROP-squad-routing-strategy — APPROVED
Adds
triage.routing_matrixto@aiox-masteragent (5 mirror locations) plus advisoryUserPromptSubmithook suggesting squads (voice-clones, claude-code-mastery, audience-engine, db-inventory) by keyword match.Rationale: closes declared squad-integration gap. Advisory-only mitigates false-positive risk. 30-50% token savings in multi-domain sessions compounds over time.
Implementation order: vocabulary-contract first → squad-routing references the now-canonical Article VII.
Test plan
eliel_decision: APPROVEDwith timestamp + rationale🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation