docs: make the repo's self-description true - ProjectTiers, README, CI inventory, layer rules - #338
Merged
Merged
Conversation
… README, CI inventory, layer rules
docs/ProjectTiers.md claimed ~69 projects (52 open / 17 commercial); git ls-files
holds 109: 18 src/ projects (MCP client/server/host, A2A, Analyzers, Authoring,
Certification.Contracts/State, AI.Pipeline, Agents.TestKit, Bricks.SqlProfile and
their tests), the whole applications/ tree, samples/, spikes/ and tools/ were absent.
README said application/src/ holds "Game Director projects" (it holds Nexo.API/CLI;
Game Director is commercial/), listed no MCP/A2A, and its layout tree omitted
applications/, commercial/, deploy/, samples/, spikes/, infra/, extensions/,
consumer-template/. docs/CiGateInventory.md called itself authoritative with 57
files and 15 required contexts while master's branch protection requires exactly one
(cert-gate; verified via gh api). Coverage floor drift: 80 (script) vs 83 (three docs)
vs 84 (Makefile comment, production-readiness README). CONTRIBUTING claimed
cross-platform-tests / prod-dry-run-pr run on PRs (both dispatch-only), a nine-project
PrimeTime filter (eight), and commitlint enforcement (no hook, no workflow, no
package.json; the root package-lock.json was an empty {"name":"czz"} stub).
What changed and why:
- ProjectTiers.md rebuilt against git ls-files with full csproj paths, MCP/A2A rows,
Tier 1b (authoring/cert/brick packs), Tier 3a applications/, Tier 3c
demos/samples/tools/spikes, and a "Which solution do I open?" table. A new
onboarding-docs-guard step fails when any tracked .csproj file name is missing
from the doc (path filter now includes **/*.csproj); passes on this tree (0/109).
- README: MCP/A2A in scope + subsystem map, applications/ everywhere, honest layout
tree, solution table. New applications/README.md explains application/ vs
applications/ vs apps/ and states Apache-2.0 by the Directory.Build.targets rule.
runtime-vs-application.md gains an applications/ row.
- CiGateInventory.md rewritten from the 62 workflow files: trigger classes
(14 PR / 20 push-only / 21 dispatch-only / 2 schedule-only / 2 tag-release /
3 reusable), the six remaining schedules, why path-filtered gates cannot be
required without an always-report job, and the real branch-protection snippet.
GitHubBranchProtection.md, CoverageGates-v1.md, TestingModel.md, Makefile comment
and production-readiness/README.md now state the enforced 100/80/67 floors and
that only cert-gate blocks. .github/workflows/README.md schedules corrected.
- CONTRIBUTING: layer-boundary documented as it really behaves (what it rejects,
the four exemptions, and that host PRs merge with a red non-required verify -
a known gap), dispatch-only lanes named, PrimeTime count fixed, commitlint
wording softened to "by convention". Branch-layer-rules.md updated to match.
dependency-boundary.yml path filter gains applications/**.
- M43: recent master subjects would fail commitlint (type "spike", headers > 100
chars), so the honest cheap option is deletion: commitlint.config.js, the stub
package-lock.json and .cursor/worktrees.json (ran npm install on worktree
creation) are removed; CHANGELOG wording softened.
- M42/M40: .idea/.idea.Nexo untracked (git rm --cached; .gitignore already lists
.idea/). Nexo.Commercial.GameDomain + its tests removed from
Nexo.LocalDevCore.slnf and application/Nexo.Application.sln - nothing in those
graphs references them, so the tester quickstart no longer compiles commercial
code; LICENSING.md's Application.sln row now matches. Nexo.PrimeTime.slnf is
documented as the deliberate open+commercial filter and left as-is. LICENSING.md
gains applications/tools/spikes OPEN rows and an "evaluation use" paragraph
clearly marked PROPOSED TEXT / needs owner sign-off.
Verification: application/Nexo.Application.sln builds (0 warnings, 0 errors);
Nexo.LocalDevCore.slnf's graph builds - the forward-slash slnf hits MSB5028 on
Windows SDK 9.0.317 for the unchanged original too, so it was proven via a
temporary backslash copy (restore + build green, then deleted); onboarding-docs-guard
referenced-path and ProjectTiers checks run locally and pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>…ger row, application/README, Nexo.sln row, coverage-floor drift Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
Uh oh!
There was an error while loading. Please reload this page.
IanFrelinger pushed a commit
that referenced
this pull request
Aug 17, 2026
…table + Compat row from this PR)
IanFrelinger pushed a commit
that referenced
this pull request
Aug 17, 2026
…ites, re-apply pruning subsection and domain-coverage removals; drop a stray edit artifact from TestingModel.md
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 freeto 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.
Production-readiness audit, H8 + M39 + M27 + M32 + M41 + M42 + M43 + M40 (fixable half) + L13. Ledger: https://claude.ai/code/artifact/15fa4198-97b8-4da6-bea0-0c24d364a7f3
Why
The repo's self-description had drifted badly (H8 + M39 + M27 + M32 + M41 + M42 + M43 + M40-fixable + L13):
docs/ProjectTiers.mdsaid "~69 .csproj (52 open, 17 commercial)";git ls-files "*.csproj"holds 109 (58 src, 3 application, 10 applications, 17 commercial, 7 docs, 6 samples, 3 spikes, 5 tools). 18src/projects (MCP client/server/host, A2A, Analyzers, Authoring, Certification.Contracts/State, AI.Pipeline, Agents.TestKit, Bricks.SqlProfile + tests), the wholeapplications/tree,samples/,spikes/,tools/were absent.application/src/holds "Game Director projects" (it holds Nexo.API/CLI; Game Director iscommercial/), listed no MCP/A2A, and the layout tree omittedapplications/,commercial/,deploy/,samples/,spikes/,infra/,extensions/,consumer-template/.docs/CiGateInventory.mdcalled itself authoritative with 57 files and 15 required contexts. Reality (verified withgh api repos/IanFrelinger/Nexo/branches/master/protection): 62 workflow files, branch protection requires exactlycert-gate(strict: true,enforce_admins: true).scripts/ci/kernel-coverage-gate.sh) vs 83 (GitHubBranchProtection.md, CoverageGates-v1.md, TestingModel.md) vs 84 (Makefile comment, production-readiness/README.md).workflow_dispatch-only), a nine-project PrimeTime filter (eight), and commitlint enforcement (no hook, no workflow, no package.json; rootpackage-lock.jsonwas an empty{"name":"czz"}stub).application/-touching PRs into master unless one of four exemptions holds, but since only cert-gate is required those PRs merge with a red non-requiredverify(merge: land application/mcp-a2a (MCP + A2A endpoint wiring for Nexo.API) #269, waves 1-2) — undocumented.What
(a) ProjectTiers.md rebuilt against
git ls-fileswith full csproj paths (109/109), MCP/A2A rows pointing atdocs/architecture/ProtocolIntegration-MCP-A2A.md, Tier 1b (authoring/certification/brick+policy packs), Tier 3aapplications/, Tier 3c demos/samples/tools/spikes, and a "Which solution do I open?" table (Kernel.sln has no CLI/API — 23 kernel projects + kernel tests; the CLI/API dev loop is LocalDevCore.slnf / Core.slnf). New onboarding-docs-guard step "Every tracked csproj is listed in docs/ProjectTiers.md" (git ls-files -- '*.csproj'basenames grep'd into the doc; path filter gains**/*.csproj). Passes locally: 0 unlisted / 109.(b) README — MCP/A2A in "Scope in 30 seconds" and the subsystem map,
applications/row, honest layout tree, "Which solution do I open?" table. Newapplications/README.md(singularapplication/= hosts, pluralapplications/= products on the core, Apache-2.0 by theDirectory.Build.targetsrule,apps/= configs).docs/architecture/runtime-vs-application.mdgains anapplications/row and a corrected Application.sln description.(c) CI docs from reality —
docs/CiGateInventory.mdrewritten: 62 files, trigger classes (14 PR-triggered: 2 unfiltered + 11 path-filtered + 1 label; 20 push-only path-filtered; 21 dispatch-only; 2 schedule-only; 2 tag/release; 3 reusable), the six remaining schedules, why path-filtered gates cannot be required without an always-report job, real branch-protection snippet (["cert-gate"]). GitHubBranchProtection.md ("what master enforces today" + proposal clearly labelled), CoverageGates-v1.md, TestingModel.md, Makefile comment and production-readiness/README.md now state the enforced 100/80/67 floors and that only cert-gate blocks..github/workflows/README.mdschedules corrected. CONTRIBUTING: dispatch-only lanes named withgh workflow runcommands, PrimeTime count fixed to eight (also Makefile comment + docs/Testing.md).(d) CONTRIBUTING — new section "Layer boundary and what master actually enforces": what layer-boundary rejects, the four exemptions (commercial/ co-change, Nexo.Authoring co-change, forced ProjectReference cleanup, test-only by
Microsoft.NET.Test.Sdk), branch-name rules, thatlayer-boundary / verifyis not required so host PRs merge red-verify (known gap, tracked in CiGateInventory).docs/contributing/Branch-layer-rules.mdupdated to match.dependency-boundary.ymlpath filter gainsapplications/**(both pull_request and push).(e) M43 — chose deletion + soften: recent master subjects fail the config (
spike(first-flight):type not in the enum; several headers > 100 chars), so a commitlint workflow would be red on day one. Removedcommitlint.config.js, stubpackage-lock.json,.cursor/worktrees.json(rannpm installon worktree creation). CONTRIBUTING/CHANGELOG now say "Conventional Commits by convention".(f) M42/M40 —
git rm --cachedthe four.idea/.idea.Nexofiles (.gitignore already has.idea/). RemovedNexo.Commercial.GameDomain+ its tests fromNexo.LocalDevCore.slnfandapplication/Nexo.Application.sln(grep: nothing undersrc/,application/,applications/references any commercial csproj, so the graphs build without them).Nexo.PrimeTime.slnfhas no header comment; Makefile/CONTRIBUTING describe it as the "all test assemblies" filter, so it is documented as the deliberate open+commercial filter and left as-is. LICENSING.md: Application.sln row corrected,applications/**/tools/**/spikes/**OPEN rows added (M39), and an "Evaluation use of commercial/ sources" paragraph added, marked PROPOSED TEXT / needs owner sign-off and explicitly "not in force".Verification
dotnet build application/Nexo.Application.sln --nologo -v q— 0 warnings, 0 errors (post-edit).Nexo.LocalDevCore.slnf— the unchanged origin/master file also fails withMSB5028on this Windows SDK 9.0.317 (forward-slash slnf entries not matched to Nexo.sln), so the graph was proven via a temporary backslash copy:dotnet restore+dotnet build --no-restoregreen (Nexo.CLI, Nexo.Tests.Domain, Nexo.Tests.Infrastructure), temp file deleted. CI builds it on ubuntu (devcontainer-gate).bash scripts/ci/pr-testing-strategy-gate.shvs origin/master: PASS.dependency-boundary-gatecould not run locally (no python3 on this host); no ProjectReference edges changed.git statusclean after commit; only intended removals (.idea x4, commitlint.config.js, package-lock.json, .cursor/worktrees.json).Expected CI on this PR
cert-gate(required) — unaffected.layer-boundary / verifywill be red: this PR editsapplication/Nexo.Application.slnand no exemption applies (not a csproj, no commercial/ or Authoring co-change). This is precisely the non-required-red case the PR documents; merge per current practice.dependency-boundary,testing-strategy,docs-link-check,shell-lint(no scripts touched → not triggered) should be green.🤖 Generated with Claude Code