Add the project type model doc - #437
Conversation
Define how a repo's types and language profiles are declared, validated against detection, and gated by profile, as a companion to the section and fidelity models. Declaration in the registry is the source of truth; detection validates it (false declaration and discovery advisory, with an explicit reason-carrying ignore); a language carries a build or lint-only profile, and each check names its minimum profile so a lint-only language draws no coverage or packaging finding. Records the cpp lint-only type (clang-format) and the codecov profile-awareness the model requires. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new spec document that defines the intended “project type” declaration/validation model for the fleet, and wires a pointer to it from the type spec metadata so future schema/audit slices can reference a single source of truth.
Changes:
- Add
spec/type-model.mddescribing the declaration-vs-detection model and the planned “profile” concept (build vs lint-only) for language types. - Update
spec/project-types.json’s top-levelnoteto reference the new type model doc and clarify “declared types” wording.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| spec/type-model.md | New governance/spec doc defining the project type model (declaration, detection-as-validation, profiles, and enforcement expectations). |
| spec/project-types.json | Updates the explanatory note to point readers at the new type model doc. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Split the clause-joining semicolons in the model doc (four total), reference the setup.driftnotes.current check and the registry driftNotes field by their real names, and add a Rollout status note so the doc reads as the contract the staged implementation realizes rather than describing checks not yet wired. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
spec/type-model.md:69
- The reference link definitions under "" are not alphabetized by reference name, which violates the repo Markdown convention for reference-style links (AGENTS.md:137). Please reorder these definitions alphabetically to keep the section consistent with other spec docs (e.g., spec/section-model.md).
[section-model]: ./section-model.md
[fidelity-model]: ./fidelity-model.md
[types]: ./project-types.json
[schema]: ./project-types.schema.json
[repos]: ../registry/repos.json
Uh oh!
There was an error while loading. Please reload this page.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
## Promote develop to main The lint-only language type work, slices 1-4 (doc/spec/registry only, no code path changes - no release): - **#437** - `spec/type-model.md`: the durable model doc (declared-primary, detection-as-validator, build/lint-only profiles, the ignore mechanism). - **#438** - the `cpp` type + `build`/`lint-only` profile vocabulary + per-check `minProfile` in `project-types.json`/schemas + `validate.py` enforcement; python profile names aligned to build/lint-only. - **#439** - `audit.py` gates the codecov requirement (CODECOV_TOKEN secret + codecov.yml file) on a build profile, so a lint-only language draws no coverage finding. - **#440** - reclassify ESPHome-Config `source-only + python(lint-only) + cpp(lint-only)`; record the devcontainer-is-optional convention in the section model. ## Verification - `spec/validate.py` OK; `spec/audit.py --selftest` PASS. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Slice 1 of the lint-only language type work: a durable model doc, before the schema/registry/audit slices consume it (same rollout order as the section and fidelity models).
What
spec/type-model.md- companion to section-model.md / fidelity-model.md. Defines: declaration (registry) is the source of truth; detection validates it (the consistent / false-declaration / discovery-advisory / ok matrix, with an explicit reason-carryingignore); languageprofile(build vs lint-only) with each check naming itsminProfile; codecov checks profile-aware; thecpplint-only type (clang-format); change-carries-review-weight.project-types.jsonnote gains a pointer to it.Not yet (later slices)
Schema + cpp/profile in project-types.json + registry declarations (slice 2), the audit engine - detection-as-validator, profile-aware codecov, cpp check (slice 3), ESPHome-Config reclassification (slice 4). Doc-only here, so the audit is unchanged.
Verification
spec/validate.pyOK;project-types.jsonvalid JSON.🤖 Generated with Claude Code