ontoref/reflection/forms/new_project.ncl
Jesús Pérez 0396e4037b
Some checks failed
Nickel Type Check / Nickel Type Checking (push) Has been cancelled
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
chore: add ontology and reflection
2026-03-13 00:21:04 +00:00

140 lines
6.9 KiB
Plaintext

# Form: Initialize a new project in the ontoref ecosystem
# Drives reflection/modes/new_project.ncl with concrete parameter values.
#
# No roundtrip input (project doesn't exist yet).
# Usage:
# typedialog form reflection/forms/new_project.ncl \
# --ncl-template reflection/templates/create_project.nu.j2 \
# --output scripts/create-{project_name}.nu
#
# Agent query:
# nickel export reflection/forms/new_project.ncl \
# | get elements \
# | where type != "section_header" \
# | where type != "section" \
# | select name prompt required default
{
name = "New Project",
description = "Initialize a new project in the ecosystem. Produces a Nushell script ready to execute.",
elements = [
# ── Identity ─────────────────────────────────────────────────────────────
{ type = "section_header", name = "identity_header",
title = "Project Identity", border_top = true, border_bottom = true },
{ type = "text", name = "project_name",
prompt = "Project name (identifier)",
required = true,
placeholder = "my-service",
help = "Lowercase, kebab-case. Used as NATS subject prefix (ecosystem.{name}.*), kogral id, syntaxis project name." },
{ type = "text", name = "project_description",
prompt = "One-line description",
required = true,
placeholder = "Handles user authentication for the ecosystem" },
{ type = "select", name = "project_type",
prompt = "Project type",
required = true,
options = [
{ value = "rust-service", label = "Rust binary service (has NATS + SurrealDB)" },
{ value = "rust-library", label = "Rust library crate (compile-time dependency only)" },
{ value = "nu-scripts", label = "Nushell scripts (operational automation)" },
{ value = "mixed", label = "Mixed (Rust + Nushell + Nickel)" },
] },
# ── Paths ────────────────────────────────────────────────────────────────
{ type = "section_header", name = "paths_header",
title = "Paths", border_top = true, border_bottom = true },
{ type = "text", name = "project_dir",
prompt = "Absolute path for the new project",
required = true,
placeholder = "/Users/Akasha/Development/my-service",
help = "Parent directory must exist. The directory itself must not exist yet." },
{ type = "text", name = "ontoref_dir",
prompt = "Absolute path to ontoref checkout",
required = true,
default = "/Users/Akasha/Development/ontoref",
help = "Used to copy .ontology/ templates and reflection/schema.ncl." },
# ── Git ──────────────────────────────────────────────────────────────────
{ type = "section_header", name = "git_header",
title = "Git", border_top = true, border_bottom = true },
{ type = "text", name = "git_remote_url",
prompt = "Remote git URL (optional, added after init)",
required = false,
placeholder = "https://repo.jesusperez.pro/jesus/my-service",
help = "Leave blank to skip remote setup." },
{ type = "text", name = "default_branch",
prompt = "Default branch name",
default = "main",
required = true },
# ── Ecosystem tools ──────────────────────────────────────────────────────
{ type = "section_header", name = "tools_header",
title = "Ecosystem Tools", border_top = true, border_bottom = true },
{ type = "section", name = "tools_note",
content = "All tools are optional. The project functions without them.\nADR-003: only NATS and SurrealDB are shared external runtime dependencies." },
{ type = "confirm", name = "use_nats",
prompt = "Configure NATS stream (ecosystem.{project_name}.*)?",
default = true,
help = "Creates the NATS stream for the project's ecosystem subjects. Idempotent." },
{ type = "text", name = "nats_url",
prompt = "NATS server URL",
default = "nats://localhost:4222",
when = "use_nats == true" },
{ type = "confirm", name = "use_surrealdb",
prompt = "Note SurrealDB namespace for this project?",
default = false,
help = "Does not create the namespace — just records it in the generated script." },
{ type = "text", name = "surrealdb_namespace",
prompt = "SurrealDB namespace",
when = "use_surrealdb == true",
placeholder = "my-service" },
{ type = "confirm", name = "use_kogral",
prompt = "Initialize kogral graph (.kogral/)?",
default = false,
help = "kogral init is optional. Execution continues if kogral is not installed." },
{ type = "confirm", name = "use_syntaxis",
prompt = "Register in syntaxis?",
default = false,
help = "syntaxis project create is optional. Execution continues if syntaxis is not installed." },
# ── Ontology ─────────────────────────────────────────────────────────────
{ type = "section_header", name = "ontology_header",
title = "Project Ontology", border_top = true, border_bottom = true },
{ type = "section", name = "ontology_note",
content = "The .ontology/ templates are copied from ontoref. The project owner fills in:\n core.ncl — invariants, tensions, practices specific to this project\n state.ncl — current and desired states per dimension\n gate.ncl — active membranes protecting key conditions" },
{ type = "confirm", name = "copy_ontology_template",
prompt = "Copy .ontology/ templates from ontoref?",
default = true,
help = "Copies core.ncl, state.ncl, gate.ncl stubs. Project owner fills in project-specific content." },
# ── Review ───────────────────────────────────────────────────────────────
{ type = "section_header", name = "review_header",
title = "Review", border_top = true },
{ type = "section", name = "review_note",
content = "The generated script will:\n 1. git init {project_dir}\n 2. Copy .ontology/ templates (if selected)\n 3. Configure NATS stream (if selected)\n 4. Register in kogral / syntaxis (if selected, optional)\n 5. Publish ecosystem.project.created to NATS (best-effort)" },
{ type = "confirm", name = "ready_to_generate",
prompt = "Generate the create-project script?",
default = true },
],
}