140 lines
6.9 KiB
Text
140 lines
6.9 KiB
Text
let s = import "reflection/schemas/qa.ncl" in
|
|
|
|
{
|
|
entries = [
|
|
{
|
|
id = "provisioning-dao-discipline",
|
|
question = "Which named tensions matter for ondaod analysis in provisioning, and what are this project's specific forbidden patterns?",
|
|
answer = m%"
|
|
EXTENDS ontoref/reflection/qa.ncl::ontoref-dao-discipline (protocol baseline).
|
|
Read that first for the WHAT / WHEN / HOW / WHY procedure plus the
|
|
protocol-level forbidden patterns. This entry specializes the
|
|
discipline for provisioning's specific tensions and Yang-bias failure
|
|
modes seen in this Domain-level project.
|
|
|
|
LEVEL IDENTITY (per ADR-018)
|
|
provisioning is a Domain-level project — it instantiates ontoref's
|
|
protocol for the workspace-infrastructure domain and is itself the
|
|
parent of Instance-level workspaces (workspaces/libre-wuji,
|
|
workspaces/libre-daoshi, etc.). Tensions declared here propagate as
|
|
inherited tension space to those workspaces.
|
|
|
|
NAMED TENSIONS in provisioning (.ontology/core.ncl, level = 'Tension)
|
|
|
|
Six declared, all 'Spiral-poled — every architectural decision in
|
|
provisioning is likely to engage at least one. Empty
|
|
`tensions_engaged: []` is RARE here and demands explicit justification.
|
|
|
|
nickel-complexity-vs-accessibility (Spiral)
|
|
Richer Nickel schemas → better validation; higher barrier of entry.
|
|
Synthesis: compose pattern over merge operator; progressive schema
|
|
layers (TypeDialog).
|
|
Yang-bias risks: "make schemas stricter, type more fields";
|
|
Yin-bias risks: "skip schemas to lower friction".
|
|
Synthesis state today: realized via TypeDialog progressive layering
|
|
in older modules; populating across newer ones.
|
|
|
|
monorepo-vs-split (Spiral)
|
|
Single repo simplifies cross-cutting work; complicates CI, ownership
|
|
boundaries, workspace isolation.
|
|
Yang-bias risks: "split for clean ownership";
|
|
Yin-bias risks: "keep everything together for velocity".
|
|
Synthesis state today: monorepo with structural boundaries (ADR-014
|
|
enforcement, SOLID layering).
|
|
|
|
centralized-vs-scripted (Spiral)
|
|
Orchestrator gives audit trail / rollback / state machine; direct
|
|
scripts are simpler. Solo mode is the documented mid-point.
|
|
Yang-bias risks: "everything through orchestrator for audit";
|
|
Yin-bias risks: "scripts where possible for speed".
|
|
Synthesis state today: orchestrator-canonical with solo-mode bypass
|
|
(ADR-015) — populating across the operation surface.
|
|
|
|
extension-graph-vs-declarative-config (Spiral)
|
|
Embedding ontology nodes in metadata.ncl makes extensions graph-aware;
|
|
blurs the line between configuration and code.
|
|
Yang-bias risks: "everything in the graph for visibility";
|
|
Yin-bias risks: "metadata stays pure config, no ontology refs".
|
|
Synthesis state today: ontology fields optional and additive on the
|
|
base metadata contract — claim-only / populating.
|
|
|
|
nushell-vs-rust-boundary (Spiral)
|
|
Rust improves type-safety + testability; Nushell stays operator-
|
|
scriptable + writable without recompilation. Smart-interface-
|
|
unification (ADR-029) partial-resolves: Rust owns the Registry and
|
|
Tool dispatch semantics; Nushell owns orchestration sequences,
|
|
three-tier fallback probes, and the per-operation legacy closure.
|
|
Yang-bias risks: "rewrite all of core/nulib in Rust";
|
|
Yin-bias risks: "keep everything in Nushell forever".
|
|
Synthesis state today: structural boundary at the tool-call surface
|
|
— realized for the slice covered by ADR-029, populating elsewhere.
|
|
|
|
capability-granularity-vs-simplicity (Spiral)
|
|
Fine-grained capabilities → precise conflict detection + taxonomy
|
|
maintenance burden. Coarse-grained → simple but ambiguous.
|
|
Yang-bias risks: "split into micro-capabilities for precision";
|
|
Yin-bias risks: "one capability per concern type, ignore edges".
|
|
Synthesis state today: 9 coarse capabilities chosen to defer
|
|
premature optimization (server-lifecycle, networking, storage,
|
|
container-runtime, orchestration, database, application-deployment,
|
|
dev-tooling, hypervisor) — claim-only.
|
|
|
|
PROJECT-SPECIFIC FORBIDDEN PATTERNS (additive to protocol baseline)
|
|
|
|
- "Just use a Nushell script" without considering the Rust boundary
|
|
(ADR-029) — collapses nushell-vs-rust-boundary; the structural
|
|
Registry/dispatch layer is where logic earns its place in Rust.
|
|
|
|
- "Add this to metadata as ontology nodes" reflexively — collapses
|
|
extension-graph-vs-declarative-config; ontology fields are optional
|
|
and only earn their place for non-trivial platform relationships.
|
|
|
|
- "Bypass orchestrator for this one operation" outside solo-mode —
|
|
collapses centralized-vs-scripted; the orchestrator's audit trail
|
|
is load-bearing for ADR-014 boundary enforcement.
|
|
|
|
- "Split the repo to clean up these dependencies" — collapses
|
|
monorepo-vs-split before measuring whether dependency cost actually
|
|
exceeds cross-cutting velocity benefit.
|
|
|
|
- "Add stricter Nickel contracts everywhere" — collapses nickel-
|
|
complexity-vs-accessibility; progressive layering is the synthesis,
|
|
not maximal strictness.
|
|
|
|
- "Split this capability into N sub-capabilities" without conflict-
|
|
detection failures observed in practice — collapses capability-
|
|
granularity-vs-simplicity; the 9-coarse set is intentional.
|
|
|
|
ADR INTEGRATION (criterion 5 in provisioning)
|
|
|
|
Most provisioning ADRs touch at least one Spiral. tensions_engaged: []
|
|
demands explicit justification. When the proposed ADR engages a Spiral
|
|
tension and proposes severity = 'Hard with a biconditional check, that
|
|
is a Yang-collapse smell — Spiral decisions get 'Soft constraints
|
|
reporting direction of motion, not binary pass/fail biconditionals.
|
|
|
|
WORKSPACE INHERITANCE (Instance-level projects under workspaces/)
|
|
|
|
Workspaces (workspaces/libre-wuji, workspaces/libre-daoshi, etc.) are
|
|
Instance-level (ADR-018) and inherit provisioning's tension space when
|
|
their own decisions touch the same axes. A workspace ADR that engages
|
|
centralized-vs-scripted (e.g. picking a deployment strategy) MUST
|
|
reference provisioning's tension by id, not redefine it. Workspaces
|
|
may declare their own tensions in addition; the union of own + parent
|
|
is the relevant tension set for ondaod criterion 5 in workspace ADRs.
|
|
|
|
REFERENCES
|
|
- ontoref qa::ontoref-dao-discipline protocol baseline (read first)
|
|
- .ontology/core.ncl the six named tensions
|
|
- workspaces/<ws>/reflection/qa.ncl::<ws>-dao-discipline
|
|
workspace-side extensions
|
|
- global ~/.claude/CLAUDE.md::adr?, ondaod discipline references
|
|
"%,
|
|
actor = "human",
|
|
created_at = "2026-05-03",
|
|
tags = ["provisioning", "dao", "discipline", "ondaod", "tensions", "spiral", "adr-process"],
|
|
related = [],
|
|
verified = true,
|
|
},
|
|
],
|
|
} | s.QaStore
|