let s = import "./schema.ncl" in

# Execution contexts — named environments with different tool subsets.
# The same operation may have different requirements depending on context.
#
# Query:
#   nickel export reflection/requirements/contexts.ncl | get contexts | where id == "agent"
#
# Cross-reference with tools:
#   let ctx = "ci"
#   nickel export reflection/requirements/base.ncl
#     | get tools
#     | where (contexts | any { |c| $c == $ctx })
#     | where severity == 'Hard

{
  contexts = [

    ({
      id          = "local_dev",
      description = "Full local development environment. All interactive tools available. Used for: authoring ADRs, initializing projects, running forms interactively.",
      requires    = ["nickel", "nushell", "git", "typedialog"],
      note        = "nats-cli, kogral, syntaxis are Soft — install per project needs.",
    } | s.Context),

    ({
      id          = "ci",
      description = "Continuous integration environment. No interactive backends. No typedialog. Used for: validating ADR exports, running check_hints, verifying ontology exports.",
      requires    = ["nickel", "nushell", "git"],
      note        = "typedialog is not required — CI does not run interactive forms. Agent-mode queries via `nickel export` are sufficient.",
    } | s.Context),

    ({
      id          = "agent",
      description = "AI agent context. No interactive terminal. No typedialog interactive backend. Agent reads form NCL directly via `nickel export` and fills templates. Used for: reading form structure, extracting field definitions, generating ADR files from templates.",
      requires    = ["nickel", "nushell"],
      note        = "Agent does not need typedialog installed — it reads reflection/forms/*.ncl directly with nickel export. Nushell needed for check_hint execution.",
    } | s.Context),

    ({
      id          = "benchmark",
      description = "Performance benchmarking context. Same as local_dev plus Rust toolchain for cargo bench. Used for: measuring stratum-embeddings, stratum-graph, stratum-llm performance.",
      requires    = ["nickel", "nushell", "git", "typedialog"],
      note        = "Requires nightly Rust toolchain for cargo bench with criterion. Isolated from NATS/SurrealDB production instances.",
    } | s.Context),

  ],
}
