let repo_kind_type = [|
  'DevWorkspace,
  'PublishedCrate,
  'Service,
  'Library,
  'AgentResource,
  'Mixed,
|] in

let consumer_type = [|
  'Developer,
  'Agent,
  'EndUser,
  'CI,
  'Downstream,
|] in

let artifact_kind_type = [|
  'RustDoc,
  'JsonSchema,
  'ContainerImage,
  'CratePackage,
  'StaticSite,
  'NuPlugin,
  'OntologyExport,
|] in

let audit_level_type = [|
  'Quick,
  'Standard,
  'Strict,
|] in

# ── Operational layers ──────────────────────────────────────────────────────
# A layer is a named region of the repo with visibility rules per mode.
# The `committed` flag distinguishes product (true) from process (false).

let layer_type = {
  id          | String,
  paths       | Array String,
  committed   | Bool,
  description | String | default = "",
} in

# ── Operational modes ───────────────────────────────────────────────────────
# A mode is an active perspective the developer/agent switches into.
# It determines which layers are visible and what audit level applies.

let op_mode_type = {
  id              | String,
  description     | String           | default = "",
  visible_layers  | Array String,
  audit_level     | audit_level_type | default = 'Standard,
  pre_activate    | Array String     | default = [],
  post_activate   | Array String     | default = [],
} in

# ── Publication service ─────────────────────────────────────────────────────
# Where artifacts go and what operations surround the publish action.

let auth_method_type = [|
  'SSH,
  'Token,
  'OIDC,
  'None,
|] in

let service_scope_type = [|
  'Public,
  'PrivateNetwork,
  'LocalRegistry,
  'SelfHosted,
|] in

let publication_service_type = {
  id           | String,
  artifact     | artifact_kind_type,
  scope        | service_scope_type,
  registry_url | String              | default = "",
  auth_method  | auth_method_type    | default = 'None,
  pre_publish  | Array String        | default = [],
  post_publish | Array String        | default = [],
  condition    | String              | default = "",
  trigger      | String,
} in

# ── Consumption modes (who consumes, what they need) ────────────────────────

let consumption_mode_type = {
  consumer     | consumer_type,
  needs        | Array artifact_kind_type,
  audit_level  | audit_level_type        | default = 'Standard,
  description  | String                  | default = "",
} in

# ── Tool requirements ─────────────────────────────────────────────────────
# Declares what tools the project needs. install-tools.nu and sync audit
# consume this to verify availability or trigger installation.

let install_method_type = [|
  'Builtin,
  'Cargo,
  'Npm,
  'Brew,
  'Pip,
  'Manual,
|] in

let tool_requirement_type = {
  name           | String,
  install_method | install_method_type | default = 'Builtin,
  version        | String             | default = "",
  required       | Bool               | default = true,
} in

# ── Justfile convention ──────────────────────────────────────────────────
# Declares expected justfile structure so sync audit can verify completeness.

let justfile_system_type = [| 'Import, 'Mod, 'Hybrid, 'Flat, 'None |] in

let justfile_convention_type = {
  system           | justfile_system_type | default = 'Mod,
  required_modules | Array String         | default = ["build", "test", "dev", "ci"],
  required_recipes | Array String         | default = ["default", "help"],
} in

# ── Claude baseline ─────────────────────────────────────────────────────
# Declares expected .claude/ structure per project.

let claude_baseline_type = {
  guidelines       | Array String | default = ["bash", "nushell"],
  session_hook     | Bool         | default = true,
  stratum_commands | Bool         | default = true,
} in

# ── Root manifest ───────────────────────────────────────────────────────────

let manifest_type = {
  project              | String,
  repo_kind            | repo_kind_type,
  layers               | Array layer_type              | default = [],
  operational_modes    | Array op_mode_type             | default = [],
  consumption_modes    | Array consumption_mode_type,
  publication_services | Array publication_service_type | default = [],
  tools                | Array tool_requirement_type    | default = [],
  justfile             | justfile_convention_type       | default = {},
  claude               | claude_baseline_type           | default = {},
  default_audit        | audit_level_type               | default = 'Standard,
  default_mode         | String                         | default = "dev",
} in

{
  RepoKind            = repo_kind_type,
  ConsumerType        = consumer_type,
  ArtifactKind        = artifact_kind_type,
  AuditLevel          = audit_level_type,
  AuthMethod          = auth_method_type,
  ServiceScope        = service_scope_type,
  InstallMethod       = install_method_type,
  JustfileSystem      = justfile_system_type,
  Layer               = layer_type,
  OperationalMode     = op_mode_type,
  ConsumptionMode     = consumption_mode_type,
  PublicationService  = publication_service_type,
  ToolRequirement     = tool_requirement_type,
  JustfileConvention  = justfile_convention_type,
  ClaudeBaseline      = claude_baseline_type,
  ProjectManifest     = manifest_type,
}
