feat: browser-style panel nav, repo file routing, migration 0007
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled

graph, search, api_catalog pages: back/forward history stack (PanelNav/dpNav).
  File artifact paths open in external tabs via card.repo (Gitea source URL) or
  card.docs (cargo docs for .rs) — openFile/openFileInPanel removed from all pages.
  Tera | safe required for URL values inside <script> blocks (auto-escape of slashes).

  card.ncl: repo field added.
  insert_brand_ctx: injects card_repo/card_docs into Tera context.
  #[onto_api] proc-macro: source_file = file!() emitted; ApiRouteEntry.source_file
  populated in primary catalog handler.

  migration 0007-card-repo-field: check card.ncl for repo field; skip if absent.
This commit is contained in:
Jesús Pérez 2026-03-29 08:34:09 +01:00
parent 75892a8eea
commit 183b8dcb3f
Signed by: jesus
GPG Key ID: 9F243E355E0BC939

View File

@ -1,964 +0,0 @@
[
{
"method": "GET",
"path": "/actors",
"description": "List all registered actor sessions with their last-seen timestamp and pending notification count",
"auth": "viewer",
"actors": [
"developer",
"admin"
],
"params": [
{
"name": "project",
"kind": "string",
"constraint": "optional",
"description": "Filter by project slug"
}
],
"tags": [
"actors"
],
"feature": ""
},
{
"method": "POST",
"path": "/actors/register",
"description": "Register an actor session and receive a bearer token for subsequent calls",
"auth": "none",
"actors": [
"agent",
"developer",
"ci"
],
"params": [
{
"name": "actor",
"kind": "string",
"constraint": "required",
"description": "Actor type (agent|developer|ci|admin)"
},
{
"name": "project",
"kind": "string",
"constraint": "optional",
"description": "Project slug to associate with"
},
{
"name": "label",
"kind": "string",
"constraint": "optional",
"description": "Human label for audit trail"
}
],
"tags": [
"actors",
"auth"
],
"feature": ""
},
{
"method": "DELETE",
"path": "/actors/{token}",
"description": "Deregister an actor session and invalidate its bearer token",
"auth": "none",
"actors": [
"agent",
"developer",
"ci"
],
"params": [],
"tags": [
"actors",
"auth"
],
"feature": ""
},
{
"method": "POST",
"path": "/actors/{token}/profile",
"description": "Update actor profile metadata: display name, role, and custom context fields",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [],
"tags": [
"actors"
],
"feature": ""
},
{
"method": "POST",
"path": "/actors/{token}/touch",
"description": "Extend actor session TTL; prevents the session from expiring due to inactivity",
"auth": "none",
"actors": [
"agent",
"developer",
"ci"
],
"params": [],
"tags": [
"actors"
],
"feature": ""
},
{
"method": "GET",
"path": "/adr/{id}",
"description": "Read a single ADR by id, exported from NCL as structured JSON",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"adrs"
],
"feature": ""
},
{
"method": "GET",
"path": "/api/catalog",
"description": "Full catalog of daemon HTTP endpoints with metadata: auth, actors, params, tags",
"auth": "none",
"actors": [
"agent",
"developer",
"ci",
"admin"
],
"params": [],
"tags": [
"meta",
"catalog"
],
"feature": ""
},
{
"method": "GET",
"path": "/backlog-json",
"description": "Export the project backlog as structured JSON from reflection/backlog.ncl",
"auth": "viewer",
"actors": [
"developer",
"agent"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"backlog"
],
"feature": ""
},
{
"method": "POST",
"path": "/cache/invalidate",
"description": "Invalidate one or all NCL cache entries, forcing re-export on next request",
"auth": "admin",
"actors": [
"developer",
"admin"
],
"params": [
{
"name": "file",
"kind": "string",
"constraint": "optional",
"description": "Specific file path to invalidate (omit to invalidate all)"
}
],
"tags": [
"cache"
],
"feature": ""
},
{
"method": "GET",
"path": "/cache/stats",
"description": "NCL export cache statistics: entry count, hit/miss counters",
"auth": "viewer",
"actors": [
"developer",
"admin"
],
"params": [],
"tags": [
"cache",
"meta"
],
"feature": ""
},
{
"method": "GET",
"path": "/config/cross-project",
"description": "Compare config surfaces across all registered projects: shared values, conflicts, coverage gaps",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [],
"tags": [
"config"
],
"feature": ""
},
{
"method": "GET",
"path": "/describe/actor-init",
"description": "Minimal onboarding payload for a new actor session: what to register as and what to do first",
"auth": "none",
"actors": [
"agent"
],
"params": [
{
"name": "actor",
"kind": "string",
"constraint": "optional",
"description": "Actor type to onboard as"
},
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug"
}
],
"tags": [
"describe",
"actors"
],
"feature": ""
},
{
"method": "GET",
"path": "/describe/capabilities",
"description": "Available reflection modes, just recipes, Claude capabilities and CI tools for the project",
"auth": "none",
"actors": [
"agent",
"developer",
"ci"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"describe"
],
"feature": ""
},
{
"method": "GET",
"path": "/describe/connections",
"description": "Cross-project connection declarations: upstream, downstream, peers with addressing",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"describe",
"federation"
],
"feature": ""
},
{
"method": "GET",
"path": "/describe/guides",
"description": "Complete operational context for an actor: identity, axioms, practices, constraints, gate state, modes, actor policy, connections, content assets",
"auth": "none",
"actors": [
"agent",
"developer",
"ci"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
},
{
"name": "actor",
"kind": "string",
"constraint": "optional",
"description": "Actor context filters the policy (agent|developer|ci|admin)"
}
],
"tags": [
"describe",
"guides"
],
"feature": ""
},
{
"method": "GET",
"path": "/describe/project",
"description": "Project self-description: identity, axioms, tensions, practices, gates, ADRs, dimensions",
"auth": "none",
"actors": [
"agent",
"developer",
"ci",
"admin"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"describe",
"ontology"
],
"feature": ""
},
{
"method": "GET",
"path": "/graph/impact",
"description": "BFS impact graph from an ontology node; optionally traverses cross-project connections",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "node",
"kind": "string",
"constraint": "required",
"description": "Ontology node id to start from"
},
{
"name": "depth",
"kind": "u32",
"constraint": "default=2",
"description": "Max BFS hops (capped at 5)"
},
{
"name": "include_external",
"kind": "bool",
"constraint": "default=false",
"description": "Follow connections.ncl to external projects"
},
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"graph",
"federation"
],
"feature": ""
},
{
"method": "GET",
"path": "/graph/node/{id}",
"description": "Resolve a single ontology node by id from the local cache (used by federation)",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"graph",
"federation"
],
"feature": ""
},
{
"method": "GET",
"path": "/health",
"description": "Daemon health check: uptime, version, feature flags, active projects",
"auth": "none",
"actors": [
"agent",
"developer",
"ci",
"admin"
],
"params": [],
"tags": [
"meta"
],
"feature": ""
},
{
"method": "POST",
"path": "/nickel/export",
"description": "Export a Nickel file to JSON, using the cache when the file is unchanged",
"auth": "viewer",
"actors": [
"developer",
"agent"
],
"params": [
{
"name": "file",
"kind": "string",
"constraint": "required",
"description": "Absolute path to the .ncl file to export"
},
{
"name": "import_path",
"kind": "string",
"constraint": "optional",
"description": "NICKEL_IMPORT_PATH override"
}
],
"tags": [
"nickel",
"cache"
],
"feature": ""
},
{
"method": "POST",
"path": "/notifications/ack",
"description": "Acknowledge one or more notifications; removes them from the pending queue",
"auth": "none",
"actors": [
"agent",
"developer",
"ci"
],
"params": [
{
"name": "token",
"kind": "string",
"constraint": "required",
"description": "Actor bearer token"
},
{
"name": "ids",
"kind": "string",
"constraint": "required",
"description": "Comma-separated notification ids to acknowledge"
}
],
"tags": [
"notifications"
],
"feature": ""
},
{
"method": "GET",
"path": "/notifications/pending",
"description": "Poll pending notifications for an actor; optionally marks them as seen",
"auth": "none",
"actors": [
"agent",
"developer",
"ci"
],
"params": [
{
"name": "token",
"kind": "string",
"constraint": "required",
"description": "Actor bearer token"
},
{
"name": "project",
"kind": "string",
"constraint": "optional",
"description": "Project slug filter"
},
{
"name": "check_only",
"kind": "bool",
"constraint": "default=false",
"description": "Return count without marking seen"
}
],
"tags": [
"notifications"
],
"feature": ""
},
{
"method": "GET",
"path": "/notifications/stream",
"description": "SSE push stream: actor subscribes once and receives notification events as they occur",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "token",
"kind": "string",
"constraint": "required",
"description": "Actor bearer token"
},
{
"name": "project",
"kind": "string",
"constraint": "optional",
"description": "Project slug filter"
}
],
"tags": [
"notifications",
"sse"
],
"feature": ""
},
{
"method": "GET",
"path": "/ontology",
"description": "List available ontology extension files beyond core, state, gate, manifest",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"ontology"
],
"feature": ""
},
{
"method": "POST",
"path": "/ontology/changed",
"description": "Git hook endpoint: actor signs a file-change event it caused to suppress self-notification",
"auth": "viewer",
"actors": [
"developer",
"ci"
],
"params": [
{
"name": "token",
"kind": "string",
"constraint": "required",
"description": "Actor bearer token"
},
{
"name": "files",
"kind": "string",
"constraint": "required",
"description": "JSON array of changed file paths"
}
],
"tags": [
"ontology",
"notifications"
],
"feature": ""
},
{
"method": "GET",
"path": "/ontology/{file}",
"description": "Export a specific ontology extension file to JSON",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"ontology"
],
"feature": ""
},
{
"method": "GET",
"path": "/projects",
"description": "List all registered projects with slug, root, push_only flag and import path",
"auth": "admin",
"actors": [
"admin"
],
"params": [],
"tags": [
"projects",
"registry"
],
"feature": ""
},
{
"method": "POST",
"path": "/projects",
"description": "Register a new project at runtime without daemon restart",
"auth": "admin",
"actors": [
"admin"
],
"params": [],
"tags": [
"projects",
"registry"
],
"feature": ""
},
{
"method": "DELETE",
"path": "/projects/{slug}",
"description": "Deregister a project and stop its file watcher",
"auth": "admin",
"actors": [
"admin"
],
"params": [],
"tags": [
"projects",
"registry"
],
"feature": ""
},
{
"method": "GET",
"path": "/projects/{slug}/config",
"description": "Full config export for a registered project (merged with any active overrides)",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "required",
"description": "Project slug"
}
],
"tags": [
"config"
],
"feature": ""
},
{
"method": "GET",
"path": "/projects/{slug}/config/coherence",
"description": "Multi-consumer coherence report: unclaimed NCL fields, consumer field mismatches",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "required",
"description": "Project slug"
},
{
"name": "section",
"kind": "string",
"constraint": "optional",
"description": "Filter to one section"
}
],
"tags": [
"config"
],
"feature": ""
},
{
"method": "GET",
"path": "/projects/{slug}/config/quickref",
"description": "Generated config documentation with rationales, override history, and coherence status",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "required",
"description": "Project slug"
},
{
"name": "section",
"kind": "string",
"constraint": "optional",
"description": "Filter to one section"
},
{
"name": "format",
"kind": "string",
"constraint": "optional",
"description": "Output format (json|markdown)"
}
],
"tags": [
"config"
],
"feature": ""
},
{
"method": "GET",
"path": "/projects/{slug}/config/schema",
"description": "Config surface schema: sections with descriptions, rationales, contracts, and declared consumers",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "required",
"description": "Project slug"
}
],
"tags": [
"config"
],
"feature": ""
},
{
"method": "GET",
"path": "/projects/{slug}/config/{section}",
"description": "Values for a single config section (from the merged NCL export)",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "required",
"description": "Project slug"
},
{
"name": "section",
"kind": "string",
"constraint": "required",
"description": "Section id"
}
],
"tags": [
"config"
],
"feature": ""
},
{
"method": "PUT",
"path": "/projects/{slug}/config/{section}",
"description": "Mutate a config section via the override layer. dry_run=true (default) returns the proposed change without writing.",
"auth": "admin",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "required",
"description": "Project slug"
},
{
"name": "section",
"kind": "string",
"constraint": "required",
"description": "Section id"
}
],
"tags": [
"config"
],
"feature": ""
},
{
"method": "PUT",
"path": "/projects/{slug}/keys",
"description": "Hot-rotate credentials for a project; invalidates all existing actor and UI sessions",
"auth": "admin",
"actors": [
"admin"
],
"params": [],
"tags": [
"projects",
"auth"
],
"feature": ""
},
{
"method": "GET",
"path": "/projects/{slug}/ontology/versions",
"description": "Per-file ontology change counters for a project; incremented on every cache invalidation",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [],
"tags": [
"projects",
"ontology",
"cache"
],
"feature": ""
},
{
"method": "GET",
"path": "/qa-json",
"description": "Export the Q&A knowledge store as structured JSON from reflection/qa.ncl",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"qa"
],
"feature": ""
},
{
"method": "GET",
"path": "/search",
"description": "Full-text search over ontology nodes, ADRs, practices and Q&A entries",
"auth": "none",
"actors": [
"agent",
"developer"
],
"params": [
{
"name": "q",
"kind": "string",
"constraint": "required",
"description": "Search query string"
},
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (ui feature only)"
}
],
"tags": [
"search"
],
"feature": ""
},
{
"method": "POST",
"path": "/sync",
"description": "Push-based sync: remote projects POST their NCL export JSON here to update the daemon cache",
"auth": "viewer",
"actors": [
"ci",
"agent"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "required",
"description": "Project slug from Authorization header context"
}
],
"tags": [
"sync",
"federation"
],
"feature": ""
},
{
"method": "GET",
"path": "/validate/adrs",
"description": "Execute typed ADR constraint checks and return per-constraint pass/fail results",
"auth": "viewer",
"actors": [
"developer",
"ci",
"agent"
],
"params": [
{
"name": "slug",
"kind": "string",
"constraint": "optional",
"description": "Project slug (defaults to primary)"
}
],
"tags": [
"validate",
"adrs"
],
"feature": ""
}
]