# Project codes

> Talos next · Since 0.6; changed in 0.7, next

The 48 diagnostics the project manifest validator (argus.project.json) can report.

Each code is prefixed `project-`, so a project diagnostic cannot be mistaken for a scene rule. Every code is an error unless its row says warning; a warning still lets the project open.

| Code | Severity | Meaning |
|---|---|---|
| `project-schema-shape` | error | Not JSON, not an object, a wrong type, a missing field or an unknown key. |
| `project-schema-version-unsupported` | error | `schemaVersion` is missing, not a whole number, newer than this build, or unknown. |
| `project-schema-version-outdated` | error | `schemaVersion` is older and the migration registry can bring it forward. |
| `project-id` | error | `projectId` is not a lowercase RFC 9562 UUID. |
| `project-application-id` | error | `application.id` is not a lowercase reverse-DNS identifier. |
| `project-display-name` | error | `application.displayName` is empty, whitespace, multi-line or too long. |
| `project-executable-name` | error | `application.executableName` cannot be a file name on Windows, Linux and macOS alike. |
| `project-publisher` | error | `application.publisher` is empty, too long, has a control character or has leading or trailing space. |
| `project-version` | error | `application.version` is not SemVer 2.0.0 `MAJOR.MINOR.PATCH[-PRERELEASE]`. |
| `project-version-range` | error | A version field is above 65535, so Windows VERSIONINFO cannot hold it. |
| `project-build-number` | error | `application.buildNumber` is not a whole number from 0 to 65535. |
| `project-window-size` | error | `window.width` or `window.height` is not a whole number in range. |
| `project-path-absolute` | error | A path is absolute: a leading slash or backslash, or a drive letter. |
| `project-path-escapes` | error | A path leaves the project root, by `..` or through a symbolic link. |
| `project-path-form` | error | A path is not in normalized form or has a segment Windows cannot store. |
| `project-path-missing` | error | A path names nothing, names it with different case, or names a folder. |
| `project-startup-scene` | error | `startupScene` exists but does not validate as a scene. |
| `project-ui-default-theme` | error | `settings.ui.defaultTheme` is not a `.css` file under `ui/theme/`. |
| `project-ui-default-locale` | error | `settings.ui.defaultLocale` is not a locale tag: a path, empty, or not BCP 47's shape. |
| `project-ui-start-screen` | warning | The startup scene declares `meta.ui.startScreen` and the project ships no screen at all. A warning: the project still opens. |
| `project-icon-format` | error | `application.icon` is not a structurally sound PNG (SVG is refused here too). |
| `project-icon-square` | error | `application.icon` is not square. |
| `project-icon-size` | error | `application.icon` is smaller than 256 or larger than 4096 pixels. |
| `project-icon-required` | error | A release build has no `application.icon`. |
| `project-location` | error | A resolver location is unusable: relative (the resolver never reads the working directory), a file that is not `argus.project.json` passed where a project is required, or something that is neither a file nor a folder. |
| `project-render-profile` | error | `render.profile` is not a renderer this engine has: `standard` or `hd`. |
| `project-render-quality-preset` | error | `render.quality.preset` (or a custom profile's `based_on`) is not a quality preset. |
| `project-render-quality-target-fps` | error | `render.quality.target_fps` is outside 24..480 frames per second. |
| `project-render-quality-knob` | error | A `render.quality` override or custom setting names a group or knob the HD renderer does not have. |
| `project-render-quality-type` | error | A `render.quality` knob value has the wrong JSON type for its knob. |
| `project-render-quality-custom` | error | `render.quality.preset` is `custom` without a `custom` profile, or a profile without `basedOn` misses required knobs. |
| `project-render-quality-without-hd` | error | `render.quality` is set on a project whose `render.profile` is not `hd`. |
| `project-render-quality-custom-newer-knobs` | warning | A custom profile without `basedOn` omits optional knobs (ones added after it could have been saved); they take their declared defaults. A warning: the profile is valid. |
| `project-default-invalid` | error | A project default (`physics`, `graphics.render`, `input`, `audio`; D19) that a scene rule refuses, as a scene that sets nothing of its own would take it. The message names the rule. |
| `project-render-quality-platform` | warning | `render.quality.platforms` names no export target (`windows`, `linux`). A warning: a project written for a later target still loads. |
| `project-kind` | error | `kind` is not a project kind this engine has: `3d` or `2d`. |
| `project-kind-2d-hd` | warning | `kind` `2d` with `render.profile` `hd`: a combination the project-type picker does not offer yet. A warning: the project loads and draws with the HD renderer. |
| `project-layers-invalid` | error | `layers` is not a layer table: more than 32, a repeated or badly formed name, or the first not `default` (layers.ts). Layers and cameras, allotted 37. |
| `project-layers-unknown` | error | A `layers` entry's `ignores` names a layer the table does not declare. Allotted 38. |
| `project-engine-saved-with` | warning | `savedWith` is not `MAJOR.MINOR.PATCH`. A warning: the project opens, the upgrade check cannot read the field. Allotted 39. |
| `project-engine-saved-with-newer` | error | `savedWith` names a later engine series than the engine reading the project (the caller passes its own version as `engineVersion`). An error: the project may hold what this engine cannot read, or would lose on saving, so the editor, `argus run` and `argus project migrate` refuse it. Allotted 40. |
| `project-export-app-id` | error | `export.appId` is not valid on Android and iOS alike: fewer than two dot-separated segments, a segment that is not `[A-Za-z][A-Za-z0-9_]*`, or a Java keyword. Allotted 41. |
| `project-render-backend` | error | `render.backend` is not a graphics backend this engine has: `auto`, `vulkan` or `dx12`. Pending coordinator confirmation (default allocation, lane plat-gfxbackend). |
| `project-render-backend-unsupported` | error | `render.backend` `dx12` for a target other than Windows (export, launch). Pending coordinator confirmation (default allocation, lane plat-gfxbackend). |
| `project-assets-provider` | error | `assets.generation.provider`, `assets.concept.imageProvider` or `assets.music.provider` names a provider this engine does not have. |
| `project-assets-value` | error | An `assets` value is unusable: an unknown image model, an empty or multi-line style word, a budget that is not a known class, profile or whole number, or a spend cap that is not a number of dollars from 0. |
| `project-experimental` | error | An `experimental` entry is not a string, is repeated, or names no Experimental feature in the engine's feature list (docs/features/features.json); the message lists the ids it may name. New, number not yet given. |
| `project-experimental-promoted` | warning | An `experimental` entry names a feature the feature list has at another label (Beta or Stable), such as a part promoted since the project opted in: a warning, and the opt-in changes nothing. New, number not yet given. |
