docs: update README and CHANGELOG for nickel branch (2026-05-12)

This commit is contained in:
Jesús Pérez 2026-05-12 02:32:02 +01:00
parent 749cbcf8b6
commit 0d202708b9
Signed by: jesus
GPG key ID: 9F243E355E0BC939
7 changed files with 183 additions and 73 deletions

View file

@ -43,6 +43,35 @@ repos:
# pass_filenames: false # pass_filenames: false
# stages: [pre-push] # stages: [pre-push]
# ============================================================================
# Ontoref Hooks (ACTIVE)
# ============================================================================
- repo: local
hooks:
- id: manifest-coverage
name: Manifest capability completeness
entry: bash -c 'ONTOREF_ROOT="$(pwd)" ONTOREF_PROJECT_ROOT="$(pwd)" nu --no-config-file -c "use ./reflection/modules/sync.nu *; sync manifest-check"'
language: system
files: (\.ontology/|reflection/modes/|reflection/forms/).*\.ncl$
pass_filenames: false
stages: [pre-commit]
- id: docs-links
name: Rustdoc broken intra-doc links
entry: bash -c 'RUSTDOCFLAGS="-D rustdoc::broken-intra-doc-links -D rustdoc::private-intra-doc-links" cargo doc --manifest-path platform/Cargo.toml --no-deps --workspace -q'
language: system
types: [rust]
pass_filenames: false
stages: [pre-commit]
- id: docs-drift
name: Crate //! doc drift check
entry: bash -c 'nu -c "use ./reflection/modules/sync.nu; sync diff --docs --fail-on-drift"'
language: system
types: [rust]
pass_filenames: false
stages: [pre-commit]
# ============================================================================ # ============================================================================
# Nushell Hooks (ACTIVE) # Nushell Hooks (ACTIVE)
# ============================================================================ # ============================================================================

View file

@ -1,8 +1,88 @@
# Provisioning Repository - Changes # Provisioning Repository - Changes
**Date**: 2026-01-08 ---
## 2026-05-12 — nickel branch consolidation
### ADR-025 Amendments: Eager function-body parse (2026-04-17)
**Decision**: Nushell parses `use` statements inside function bodies at module-load time. Subprocess boundary is the only true lazy-load mechanism.
**Constraints added/amended**:
- `bash-wrapper-has-no-runner-reference` — now permits `provisioning-cli.nu` as transitional fallback
- `universal-fallback-is-transitional` — 22 unmapped commands are explicit migration debt; must be resolved before lazy-load architecture is considered complete
- `every-registry-command-has-thin-handler` — made directional (progress metric, not gate)
**Rejected approach**: Single-entry `provisioning-cli.nu` for hot paths — measured at 3.1s vs 0.080.15s for thin handlers. All 15 dispatcher wrappers fire at module-load regardless of invoked command.
**Files**: `adrs/adr-025-unified-lazy-loading.ncl`
---
### Platform Services Documentation (2026-02-03)
**All 10 platform services documented** with endpoint catalogue and local setup guide.
**Services**:
| Service | Endpoints | Notes |
| ------- | --------- | ----- |
| vault | 8 | Transit encryption, dynamic secrets |
| registry | 6 | OCI extension distribution |
| control-center | 12 | RBAC, audit, compliance |
| rag | 5 | Vector search, document ingestion |
| ai-service | 7 | Model routing, DAG execution |
| mcp-server | 4 | AI-powered config tools |
| daemon | 3 | State sync, health aggregation |
| orchestrator | 8 | Workflow execution, checkpoints |
| detector | 4 | Anomaly detection, alerts |
| ui | 3 | Web control center frontend |
**Added**:
- `docs/src/operations/platform-services-inventory.md` — 50+ endpoints
- `docs/src/operations/local-services-setup.md` — build, config, troubleshooting
- `scripts/start-local-binaries.nu` — dependency-ordered service startup automation
---
### TypeDialog Migration (2026-01-09)
**`forminquire` fully replaced** by TOML-driven `typedialog` with TTY wrappers.
**New form registry** (`.typedialog/`):
- `core/forms/auth-login.toml`
- `core/forms/mfa-enroll.toml`
- `core/forms/setup-wizard.toml`
- `core/forms/infrastructure/server_delete_confirm.toml`
- `core/forms/infrastructure/cluster_delete_confirm.toml`
- `core/forms/infrastructure/taskserv_delete_confirm.toml`
- `core/forms/infrastructure/generic_delete_confirm.toml`
- `platform/forms/ai-service-form.toml` (with Nickel fragment composition)
- `platform/forms/control-center-form.toml`
- `platform/forms/extension-registry-form.toml`
**Documentation**: `.typedialog/README.md`, `platform/forms/README.md`, `platform/forms/fragments/README.md`
**Architecture doc**: `docs/src/architecture/config-loading-architecture.md`
---
### Nushell 0.110.0 Compatibility (2026-01-21)
- Fixed `try`/`catch` syntax across `.typedialog/platform/scripts/`, `bootstrap/install.nu`, example deploy scripts
- Updated `external.nu`, `paths.nu`, `export-toml.nu` for Nu 0.110.0 API changes
- Removed stale session reports from `.coder/`
- Relocated `nickel-installation-guide.md` into `docs/src/setup/`
---
## 2026-01-08 — Nickel IaC migration complete
**Repository**: provisioning (standalone, nickel branch) **Repository**: provisioning (standalone, nickel branch)
**Changes**: Nickel IaC migration complete - Legacy KCL and config cleanup **Changes**: Nickel IaC migration complete Legacy KCL and config cleanup
--- ---
@ -129,3 +209,7 @@ nickel eval --format json <your-config.ncl> | jq '.'
**Status**: Nickel migration complete. System is production-ready. **Status**: Nickel migration complete. System is production-ready.
**Date**: 2026-01-08 **Date**: 2026-01-08
**Branch**: nickel **Branch**: nickel
---
*Last updated: 2026-05-12*

View file

@ -23,7 +23,7 @@
--- ---
## What is Provisioning? ## What is Provisioning
**Provisioning** is a comprehensive **Infrastructure as Code (IaC)** platform designed to manage **Provisioning** is a comprehensive **Infrastructure as Code (IaC)** platform designed to manage
complete infrastructure lifecycles: cloud providers, infrastructure services, clusters, complete infrastructure lifecycles: cloud providers, infrastructure services, clusters,
@ -78,7 +78,7 @@ Declarative Infrastructure as Code (IaC) platform providing:
--- ---
## Why Provisioning? ## Why Provisioning
### The Problems It Solves ### The Problems It Solves
@ -509,7 +509,8 @@ Three native Rust plugins providing 10-50x performance improvements over HTTP AP
Enterprise-grade security with 39,699 lines across 12 components. Enterprise-grade security with 39,699 lines across 12 components.
- **12 Components**: JWT Auth, Cedar Authorization, MFA (TOTP + WebAuthn), Secrets Management, KMS, Audit Logging, Break-Glass, Compliance, Audit Query, Token Management, Access Control, Encryption - **12 Components**: JWT Auth, Cedar Authorization, MFA (TOTP + WebAuthn), Secrets Management,
KMS, Audit Logging, Break-Glass, Compliance, Audit Query, Token Management, Access Control, Encryption
- **Performance**: <20ms overhead per secure operation - **Performance**: <20ms overhead per secure operation
- **Testing**: 350+ comprehensive test cases - **Testing**: 350+ comprehensive test cases
- **API**: 83+ REST endpoints, 111+ CLI commands - **API**: 83+ REST endpoints, 111+ CLI commands
@ -531,7 +532,7 @@ Enterprise-grade security with 39,699 lines across 12 components.
| Technology | Version | Purpose | Why | | Technology | Version | Purpose | Why |
| ------------ | --------- | --------- | ----- | | ------------ | --------- | --------- | ----- |
| **Nickel** | Latest | PRIMARY - Infrastructure-as-code language | Type-safe schemas, lazy evaluation, LSP support, composable records, gradual validation | | **Nickel** | Latest | PRIMARY - Infrastructure-as-code language | Type-safe schemas, lazy evaluation, LSP support, composable records |
| **Nushell** | 0.109.0+ | Scripting and task automation | Structured data pipelines, cross-platform, modern built-in parsers (JSON/YAML/TOML) | | **Nushell** | 0.109.0+ | Scripting and task automation | Structured data pipelines, cross-platform, modern built-in parsers (JSON/YAML/TOML) |
| **Rust** | Latest | Platform services (orchestrator, control-center, installer) | Performance, memory safety, concurrency, reliability | | **Rust** | Latest | Platform services (orchestrator, control-center, installer) | Performance, memory safety, concurrency, reliability |
| **KCL** | DEPRECATED | Legacy configuration (fully replaced by Nickel) | Migration bridge available; use Nickel for new work | | **KCL** | DEPRECATED | Legacy configuration (fully replaced by Nickel) | Migration bridge available; use Nickel for new work |
@ -540,7 +541,7 @@ Enterprise-grade security with 39,699 lines across 12 components.
| Technology | Version | Purpose | Features | | Technology | Version | Purpose | Features |
| ------------ | --------- | --------- | ---------- | | ------------ | --------- | --------- | ---------- |
| **SurrealDB** | Latest | High-performance graph database backend | Multi-model (document, graph, relational), real-time queries, distributed architecture, complex relationship tracking | | **SurrealDB** | Latest | High-performance graph database backend | Multi-model (document, graph, relational), real-time queries, distributed |
### Platform Services (Rust-based) ### Platform Services (Rust-based)
@ -1078,48 +1079,46 @@ See [LICENSE](LICENSE) file in project root.
--- ---
**Maintained By**: Architecture Team **Maintained By**: Architecture Team
**Last Updated**: 2026-01-08 (Version Management System v3.6.0 + Nickel v5.0.0 Migration Complete) **Last Updated**: 2026-05-12
**Current Branch**: nickel **Current Branch**: nickel
**Project Home**: [provisioning/](provisioning/) **Project Home**: [provisioning/](provisioning/)
--- ---
## Recent Changes (2026-01-08) ## Recent Changes (2026-05-12)
### Version Management System (v3.6.0) ### ADR-025: Eager function-body parse + transitional fallback (2026-04-17)
**What Changed**: **Architectural finding with lasting constraints**:
- ✅ Implemented `provisioning setup versions` command
- ✅ Generates bash-compatible `/provisioning/core/versions` file
- ✅ Automatically discovers and includes all provider versions from Nickel schemas
- ✅ Fixed to remove redundant metadata (all sources are Nickel)
- ✅ Core tools with aliases: NUSHELL→NU, NICKEL, SOPS, AGE, K9S
- ✅ Shell script integration: `source /provisioning/core/versions && echo $NU_VERSION`
**Files Modified**: - Nushell parses `use` statements inside function bodies at **module-load time**, not call time. Subprocess boundary is the only true lazy-load mechanism.
- `provisioning/core/nulib/lib_provisioning/setup/utils.nu` - Core implementation - `provisioning-cli.nu` single-entry point tested and rejected for hot paths: 3.1s vs 0.080.15s
- `provisioning/core/nulib/main_provisioning/commands/setup.nu` - Command routing with thin handlers. All 15 dispatcher wrappers fire at module-load regardless of which command runs.
- `provisioning/core/nulib/lib_provisioning/workspace/enforcement.nu` - Workspace exemption - 22 unmapped commands documented as migration debt (`universal-fallback-is-transitional` constraint).
- `provisioning/README.md` - Documentation updates - `bash-wrapper-has-no-runner-reference` amended to permit `provisioning-cli.nu` fallback during migration.
**Generated File Example**: ### Platform Services Documentation (2026-02-03)
```bash
NUSHELL_VERSION="0.109.1"
NUSHELL_SOURCE="https://github.com/nushell/nushell/releases"
NU_VERSION="0.109.1"
NU_SOURCE="https://github.com/nushell/nushell/releases"
NICKEL_VERSION="1.15.1" **All 10 platform services fully documented**:
NICKEL_SOURCE="https://github.com/tweag/nickel/releases"
PROVIDER_AWS_VERSION="2.32.11" - Services: vault, registry, control-center, rag, ai, mcp, daemon, orchestrator, detector, ui
PROVIDER_AWS_SOURCE="https://github.com/aws/aws-cli/releases" - 50+ REST endpoints catalogued with method, path, auth requirements
# ... and more providers - `start-local-binaries.nu` — automation script with dependency resolution for local development
``` - Local Services Setup Guide added to `docs/src/operations/`
**Key Improvements**: ### TypeDialog Migration (2026-01-09)
- Clean metadata (no redundant `_LIB` fields - all sources are Nickel)
- Automatic provider discovery from `extensions/providers/*/nickel/version.ncl` **`forminquire` fully replaced by `typedialog`**:
- Direct Nickel file parsing with JSON export
- Zero dependency on environment variables or legacy systems - All interactive forms migrated to TOML-driven `typedialog` schema
- 100% bash/shell compatible for deployment scripts - TTY wrapper scripts for terminal-safe form rendering
- Core forms: `auth-login`, `mfa-enroll`, `setup-wizard`
- Infrastructure delete confirmations: server, cluster, taskserv, generic
- Platform forms: ai-service, control-center, extension-registry with Nickel fragment composition
### Nushell 0.110.0 Compatibility (2026-01-21)
- Fixed `try-catch` syntax across bootstrap, scripts, and typedialog Nu scripts
- Reviewed and updated: `export-toml.nu`, `external.nu`, `paths.nu`, `configure.nu`
- Removed obsolete `.coder/` session reports; documentation structure reorganized
- Config loading architecture document added: `docs/src/architecture/config-loading-architecture.md`

View file

@ -81,19 +81,19 @@ provisioning_binaries := "provisioning-ai-service provisioning-extension-registr
# Install binaries locally (default: ~/.local/bin) # Install binaries locally (default: ~/.local/bin)
distro-install: distro-install:
#!/usr/bin/env bash #!/usr/bin/env bash
INSTALL_DIR="{{distro_install_dir}}" INSTALL_DIR="{{distro_install_dir}}"
BUILD_DIR="{{distro_build_dir}}" BUILD_DIR="{{distro_build_dir}}"
PROVISIONING_ROOT="{{provisioning_root}}" PROVISIONING_ROOT="{{provisioning_root}}"
echo "📦 Installing provisioning binaries to: $INSTALL_DIR" echo "📦 Installing provisioning binaries to: $INSTALL_DIR"
mkdir -p "$INSTALL_DIR" || { echo "✗ Failed to create install directory"; exit 1; } mkdir -p "$INSTALL_DIR" || { echo "✗ Failed to create install directory"; exit 1; }
echo "" echo ""
echo "📂 Installing binaries..." echo "📂 Installing binaries..."
binaries_installed=0 binaries_installed=0
binaries_failed=0 binaries_failed=0
for binary in {{provisioning_binaries}}; do for binary in {{provisioning_binaries}}; do
SRC="$BUILD_DIR/$binary" SRC="$BUILD_DIR/$binary"
if [ -f "$SRC" ]; then if [ -f "$SRC" ]; then
@ -109,14 +109,14 @@ distro-install:
((binaries_failed++)) ((binaries_failed++))
fi fi
done done
echo "" echo ""
echo "📊 Installation Summary" echo "📊 Installation Summary"
echo "=====================" echo "====================="
echo "Install directory: $INSTALL_DIR" echo "Install directory: $INSTALL_DIR"
echo "Binaries installed: $binaries_installed" echo "Binaries installed: $binaries_installed"
[ $binaries_failed -gt 0 ] && echo "Binaries failed: $binaries_failed" [ $binaries_failed -gt 0 ] && echo "Binaries failed: $binaries_failed"
# Check if install dir is in PATH # Check if install dir is in PATH
if ! echo "$PATH" | grep -q "$INSTALL_DIR"; then if ! echo "$PATH" | grep -q "$INSTALL_DIR"; then
echo "" echo ""
@ -124,7 +124,7 @@ distro-install:
echo "Add to ~/.bashrc or ~/.zshrc:" echo "Add to ~/.bashrc or ~/.zshrc:"
echo " export PATH=\"\$PATH:$INSTALL_DIR\"" echo " export PATH=\"\$PATH:$INSTALL_DIR\""
fi fi
echo "" echo ""
echo "✅ Installation complete!" echo "✅ Installation complete!"
echo "" echo ""
@ -134,12 +134,12 @@ distro-install:
# Install to system directory (requires sudo) # Install to system directory (requires sudo)
distro-install-system: distro-install-system:
#!/usr/bin/env bash #!/usr/bin/env bash
INSTALL_DIR="/usr/local/bin" INSTALL_DIR="/usr/local/bin"
BUILD_DIR="{{distro_build_dir}}" BUILD_DIR="{{distro_build_dir}}"
echo "🔐 Installing provisioning binaries to: $INSTALL_DIR (requires sudo)" echo "🔐 Installing provisioning binaries to: $INSTALL_DIR (requires sudo)"
for binary in {{provisioning_binaries}}; do for binary in {{provisioning_binaries}}; do
SRC="$BUILD_DIR/$binary" SRC="$BUILD_DIR/$binary"
if [ -f "$SRC" ]; then if [ -f "$SRC" ]; then
@ -153,25 +153,25 @@ distro-install-system:
echo " ✗ $binary (not found)" echo " ✗ $binary (not found)"
fi fi
done done
echo "✅ System installation complete!" echo "✅ System installation complete!"
# Uninstall binaries # Uninstall binaries
distro-uninstall: distro-uninstall:
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
INSTALL_DIR="{{distro_install_dir}}" INSTALL_DIR="{{distro_install_dir}}"
echo "🗑️ Uninstalling provisioning binaries from: $INSTALL_DIR" echo "🗑️ Uninstalling provisioning binaries from: $INSTALL_DIR"
for binary in {{provisioning_binaries}}; do for binary in {{provisioning_binaries}}; do
if [ -f "$INSTALL_DIR/$binary" ]; then if [ -f "$INSTALL_DIR/$binary" ]; then
rm "$INSTALL_DIR/$binary" rm "$INSTALL_DIR/$binary"
echo " ✓ Removed $binary" echo " ✓ Removed $binary"
fi fi
done done
echo "✅ Uninstallation complete!" echo "✅ Uninstallation complete!"
# ============================================================================ # ============================================================================
@ -181,15 +181,15 @@ distro-uninstall:
# Verify installation integrity # Verify installation integrity
distro-verify: distro-verify:
#!/usr/bin/env bash #!/usr/bin/env bash
INSTALL_DIR="{{distro_install_dir}}" INSTALL_DIR="{{distro_install_dir}}"
echo "🔍 Verifying installation in: $INSTALL_DIR" echo "🔍 Verifying installation in: $INSTALL_DIR"
echo "" echo ""
found=0 found=0
missing=0 missing=0
for binary in {{provisioning_binaries}}; do for binary in {{provisioning_binaries}}; do
if [ -f "$INSTALL_DIR/$binary" ] && [ -x "$INSTALL_DIR/$binary" ]; then if [ -f "$INSTALL_DIR/$binary" ] && [ -x "$INSTALL_DIR/$binary" ]; then
echo " ✓ $binary" echo " ✓ $binary"
@ -199,26 +199,26 @@ distro-verify:
((missing++)) ((missing++))
fi fi
done done
echo "" echo ""
echo "📊 Summary: $found found, $missing missing" echo "📊 Summary: $found found, $missing missing"
if [ $missing -gt 0 ]; then if [ $missing -gt 0 ]; then
echo "⚠️ Some binaries are missing!" echo "⚠️ Some binaries are missing!"
exit 1 exit 1
fi fi
echo "✅ Installation verified!" echo "✅ Installation verified!"
# List installed binaries # List installed binaries
distro-list: distro-list:
#!/usr/bin/env bash #!/usr/bin/env bash
INSTALL_DIR="{{distro_install_dir}}" INSTALL_DIR="{{distro_install_dir}}"
echo "📋 Installed provisioning binaries in: $INSTALL_DIR" echo "📋 Installed provisioning binaries in: $INSTALL_DIR"
echo "" echo ""
if ls "$INSTALL_DIR"/provisioning-* 2>/dev/null | head -1 > /dev/null; then if ls "$INSTALL_DIR"/provisioning-* 2>/dev/null | head -1 > /dev/null; then
ls -lh "$INSTALL_DIR"/provisioning-* ls -lh "$INSTALL_DIR"/provisioning-*
else else
@ -270,17 +270,17 @@ distro-info:
@distro-checksums: @distro-checksums:
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
PACKAGES_DIR="{{packages_dir}}" PACKAGES_DIR="{{packages_dir}}"
if [ ! -d "$PACKAGES_DIR" ]; then if [ ! -d "$PACKAGES_DIR" ]; then
echo "✗ Packages directory not found: $PACKAGES_DIR" echo "✗ Packages directory not found: $PACKAGES_DIR"
exit 1 exit 1
fi fi
echo "🔐 Generating SHA256 checksums..." echo "🔐 Generating SHA256 checksums..."
cd "$PACKAGES_DIR" cd "$PACKAGES_DIR"
count=0 count=0
for file in *.tar.gz *.zip 2>/dev/null; do for file in *.tar.gz *.zip 2>/dev/null; do
[ -f "$file" ] || continue [ -f "$file" ] || continue
@ -288,7 +288,7 @@ distro-info:
sha256sum "$file" > "${file}.sha256" sha256sum "$file" > "${file}.sha256"
((count++)) ((count++))
done done
echo "✅ Generated $count checksums" echo "✅ Generated $count checksums"
# ============================================================================ # ============================================================================

View file

@ -83,4 +83,3 @@ let contract = std.contract in
else 'Error {message = "rate_limit_requests must be between 10 and 10000"} else 'Error {message = "rate_limit_requests must be between 10 and 10000"}
), ),
} }

View file

@ -125,4 +125,3 @@ let docker_build_schema = import "schemas/platform/docker-build.ncl" in
build | docker_build_schema.DockerBuildConfig | optional, build | docker_build_schema.DockerBuildConfig | optional,
}, },
} }

View file

@ -6,7 +6,7 @@ use std log
# Uses PROVISIONING_USER_PLATFORM env var if set, otherwise defaults to OS-specific path # Uses PROVISIONING_USER_PLATFORM env var if set, otherwise defaults to OS-specific path
def get-platform-base-dir [] { def get-platform-base-dir [] {
let env_path = ($env.PROVISIONING_USER_PLATFORM? | default "") let env_path = ($env.PROVISIONING_USER_PLATFORM? | default "")
if ($env_path | is-empty) { if ($env_path | is-empty) {
# Fallback to OS-specific default location # Fallback to OS-specific default location
let home = $nu.home-dir let home = $nu.home-dir