ontoref/ontology/schemas/manifest.ncl

174 lines
6.2 KiB
Plaintext

let repo_kind_type = [|
'DevWorkspace,
'PublishedCrate,
'Service,
'Library,
'AgentResource,
'Mixed,
'PersonalOntology,
|] 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",
# Node ID this project maps to in the ontology DAG.
# Used by portfolio tooling to cross-reference publication cards.
ontology_node | String | default = "",
} 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,
}