diff --git a/generated/k9iser/clade-portal-config.k9 b/generated/k9iser/clade-portal-config.k9 index 5a6b44b5..1b50bd00 100644 --- a/generated/k9iser/clade-portal-config.k9 +++ b/generated/k9iser/clade-portal-config.k9 @@ -1,6 +1,14 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Auto-generated K9 contract for clade-portal-config # Safety tier: yard +pedigree = { + name = "clade-portal-config", + version = "1.0.0", + leash = 'Yard, +} + [must] app.security.sandbox.enabled : string { == true } app.ipc.timeout : string { > 0 } diff --git a/generated/k9iser/contract-security.k9 b/generated/k9iser/contract-security.k9 index 67ab104c..b011d82c 100644 --- a/generated/k9iser/contract-security.k9 +++ b/generated/k9iser/contract-security.k9 @@ -1,6 +1,14 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Auto-generated K9 contract for contract-security # Safety tier: yard +pedigree = { + name = "contract-security", + version = "1.0.0", + leash = 'Yard, +} + [must] [trust] diff --git a/generated/k9iser/contract-workspace.k9 b/generated/k9iser/contract-workspace.k9 index ed3021e0..6e466d71 100644 --- a/generated/k9iser/contract-workspace.k9 +++ b/generated/k9iser/contract-workspace.k9 @@ -1,6 +1,14 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Auto-generated K9 contract for contract-workspace # Safety tier: yard +pedigree = { + name = "contract-workspace", + version = "1.0.0", + leash = 'Yard, +} + [must] [trust] diff --git a/generated/k9iser/panel-harness.k9 b/generated/k9iser/panel-harness.k9 index 9e3baabf..8da937e8 100644 --- a/generated/k9iser/panel-harness.k9 +++ b/generated/k9iser/panel-harness.k9 @@ -1,6 +1,14 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Auto-generated K9 contract for panel-harness # Safety tier: yard +pedigree = { + name = "panel-harness", + version = "1.0.0", + leash = 'Yard, +} + [must] [trust] diff --git a/generated/k9iser/pcc-cargo.k9 b/generated/k9iser/pcc-cargo.k9 index 4bf2b2c7..18bea2d6 100644 --- a/generated/k9iser/pcc-cargo.k9 +++ b/generated/k9iser/pcc-cargo.k9 @@ -1,6 +1,14 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Auto-generated K9 contract for pcc-cargo # Safety tier: yard +pedigree = { + name = "pcc-cargo", + version = "1.0.0", + leash = 'Yard, +} + [must] package.edition : string { == '2021' } diff --git a/generated/k9iser/rescript-compiler.k9 b/generated/k9iser/rescript-compiler.k9 index c886ffdb..c42d5f23 100644 --- a/generated/k9iser/rescript-compiler.k9 +++ b/generated/k9iser/rescript-compiler.k9 @@ -1,6 +1,14 @@ +K9! +# SPDX-License-Identifier: MPL-2.0 # Auto-generated K9 contract for rescript-compiler # Safety tier: yard +pedigree = { + name = "rescript-compiler", + version = "1.0.0", + leash = 'Yard, +} + [must] name : string { == 'panll' } package-specs[0].module : string { == 'esmodule' } diff --git a/layouts/database-design.k9.ncl b/layouts/database-design.k9.ncl index 82095d58..468a1c25 100644 --- a/layouts/database-design.k9.ncl +++ b/layouts/database-design.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # database-design.k9.ncl — PanLL discipline layout for database work. # @@ -53,7 +54,9 @@ let layout | LayoutPreset | PaneSizesSum100 = { { pedigree = LayoutPedigree & { + leash = 'Yard, metadata = { + version = layout.version, name = "panll-layout-database-design", magic_number = "K9!", description = layout.description, diff --git a/layouts/language-design.k9.ncl b/layouts/language-design.k9.ncl index fead921b..e178a635 100644 --- a/layouts/language-design.k9.ncl +++ b/layouts/language-design.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # language-design.k9.ncl — PanLL discipline layout for programming language work. # @@ -51,7 +52,9 @@ let layout | LayoutPreset | PaneSizesSum100 = { { pedigree = LayoutPedigree & { + leash = 'Yard, metadata = { + version = layout.version, name = "panll-layout-language-design", magic_number = "K9!", description = layout.description, diff --git a/layouts/logic-and-proofs.k9.ncl b/layouts/logic-and-proofs.k9.ncl index 0f72d026..bf9c600b 100644 --- a/layouts/logic-and-proofs.k9.ncl +++ b/layouts/logic-and-proofs.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # logic-and-proofs.k9.ncl — PanLL discipline layout for formal methods work. # diff --git a/layouts/protocol-design.k9.ncl b/layouts/protocol-design.k9.ncl index 500874f2..c1d7fe9b 100644 --- a/layouts/protocol-design.k9.ncl +++ b/layouts/protocol-design.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # protocol-design.k9.ncl — PanLL discipline layout for protocol work. # diff --git a/panel-clades/clades/aerie/config.k9.ncl b/panel-clades/clades/aerie/config.k9.ncl index 9fc8e40c..89c7ab9b 100644 --- a/panel-clades/clades/aerie/config.k9.ncl +++ b/panel-clades/clades/aerie/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Aerie Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/agentic-bridge/config.k9.ncl b/panel-clades/clades/agentic-bridge/config.k9.ncl index 6771fb94..19bbccb7 100644 --- a/panel-clades/clades/agentic-bridge/config.k9.ncl +++ b/panel-clades/clades/agentic-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Agentic Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/ai/config.k9.ncl b/panel-clades/clades/ai/config.k9.ncl index 9969800c..53ca5076 100644 --- a/panel-clades/clades/ai/config.k9.ncl +++ b/panel-clades/clades/ai/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: AI Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/ambientops/config.k9.ncl b/panel-clades/clades/ambientops/config.k9.ncl index 9add3efa..0499e365 100644 --- a/panel-clades/clades/ambientops/config.k9.ncl +++ b/panel-clades/clades/ambientops/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: AmbientOps Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/architect-mode/config.k9.ncl b/panel-clades/clades/architect-mode/config.k9.ncl index b84a3d77..be0639c0 100644 --- a/panel-clades/clades/architect-mode/config.k9.ncl +++ b/panel-clades/clades/architect-mode/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Architect Mode Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/asset-manager/config.k9.ncl b/panel-clades/clades/asset-manager/config.k9.ncl index 140265b3..e91dadf8 100644 --- a/panel-clades/clades/asset-manager/config.k9.ncl +++ b/panel-clades/clades/asset-manager/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Asset Manager Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/automation-bridge/config.k9.ncl b/panel-clades/clades/automation-bridge/config.k9.ncl index 047a5770..9512b984 100644 --- a/panel-clades/clades/automation-bridge/config.k9.ncl +++ b/panel-clades/clades/automation-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Automation Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/automation-router/config.k9.ncl b/panel-clades/clades/automation-router/config.k9.ncl index c9de7f85..bfa42815 100644 --- a/panel-clades/clades/automation-router/config.k9.ncl +++ b/panel-clades/clades/automation-router/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Automation Router Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/balance-analyser/config.k9.ncl b/panel-clades/clades/balance-analyser/config.k9.ncl index b52e09d8..0a5403f3 100644 --- a/panel-clades/clades/balance-analyser/config.k9.ncl +++ b/panel-clades/clades/balance-analyser/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Balance Analyser Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/beta-feedback-hub/config.k9.ncl b/panel-clades/clades/beta-feedback-hub/config.k9.ncl index e1e1ec16..329fd97e 100644 --- a/panel-clades/clades/beta-feedback-hub/config.k9.ncl +++ b/panel-clades/clades/beta-feedback-hub/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Beta Feedback Hub Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/boj/config.k9.ncl b/panel-clades/clades/boj/config.k9.ncl index 8afd4fb8..1eb91a34 100644 --- a/panel-clades/clades/boj/config.k9.ncl +++ b/panel-clades/clades/boj/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: BoJ Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/build-dashboard/config.k9.ncl b/panel-clades/clades/build-dashboard/config.k9.ncl index 9d919ef2..ed219849 100644 --- a/panel-clades/clades/build-dashboard/config.k9.ncl +++ b/panel-clades/clades/build-dashboard/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Build Dashboard Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/capture/config.k9.ncl b/panel-clades/clades/capture/config.k9.ncl index 7405f213..95f636c2 100644 --- a/panel-clades/clades/capture/config.k9.ncl +++ b/panel-clades/clades/capture/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Capture Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/clade-browser/config.k9.ncl b/panel-clades/clades/clade-browser/config.k9.ncl index 5185a408..bc6c28fb 100644 --- a/panel-clades/clades/clade-browser/config.k9.ncl +++ b/panel-clades/clades/clade-browser/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Clade Browser Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/cloudguard/config.k9.ncl b/panel-clades/clades/cloudguard/config.k9.ncl index 736b729a..cd9e1e74 100644 --- a/panel-clades/clades/cloudguard/config.k9.ncl +++ b/panel-clades/clades/cloudguard/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: CloudGuard Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/code-review/config.k9.ncl b/panel-clades/clades/code-review/config.k9.ncl index 0f8467f8..c0870781 100644 --- a/panel-clades/clades/code-review/config.k9.ncl +++ b/panel-clades/clades/code-review/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Code Review Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/compatibility-matrix/config.k9.ncl b/panel-clades/clades/compatibility-matrix/config.k9.ncl index 4f1d5cb7..17635275 100644 --- a/panel-clades/clades/compatibility-matrix/config.k9.ncl +++ b/panel-clades/clades/compatibility-matrix/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Compatibility Matrix Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/contractile-completeness/config.k9.ncl b/panel-clades/clades/contractile-completeness/config.k9.ncl index 64520e6d..be145af7 100644 --- a/panel-clades/clades/contractile-completeness/config.k9.ncl +++ b/panel-clades/clades/contractile-completeness/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Contractile Completeness Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/coprocessors/config.k9.ncl b/panel-clades/clades/coprocessors/config.k9.ncl index d0eb6d5a..8c587938 100644 --- a/panel-clades/clades/coprocessors/config.k9.ncl +++ b/panel-clades/clades/coprocessors/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Coprocessors Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/database-bridge/config.k9.ncl b/panel-clades/clades/database-bridge/config.k9.ncl index 5cebe692..ba84fae9 100644 --- a/panel-clades/clades/database-bridge/config.k9.ncl +++ b/panel-clades/clades/database-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Database Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/databases/config.k9.ncl b/panel-clades/clades/databases/config.k9.ncl index 20cf14e0..230a1c94 100644 --- a/panel-clades/clades/databases/config.k9.ncl +++ b/panel-clades/clades/databases/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Databases Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/debugging-workbench/config.k9.ncl b/panel-clades/clades/debugging-workbench/config.k9.ncl index 16dc4e3d..f0424ee8 100644 --- a/panel-clades/clades/debugging-workbench/config.k9.ncl +++ b/panel-clades/clades/debugging-workbench/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Debugging Workbench Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/device-network-designer/config.k9.ncl b/panel-clades/clades/device-network-designer/config.k9.ncl index a2085627..d58ac8e0 100644 --- a/panel-clades/clades/device-network-designer/config.k9.ncl +++ b/panel-clades/clades/device-network-designer/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Device Network Designer Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/dlc-workshop/config.k9.ncl b/panel-clades/clades/dlc-workshop/config.k9.ncl index 4b05b8b4..97d76394 100644 --- a/panel-clades/clades/dlc-workshop/config.k9.ncl +++ b/panel-clades/clades/dlc-workshop/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: DLC Workshop Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/echidna/config.k9.ncl b/panel-clades/clades/echidna/config.k9.ncl index ddb4f33b..08263259 100644 --- a/panel-clades/clades/echidna/config.k9.ncl +++ b/panel-clades/clades/echidna/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: ECHIDNA Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/editor-bridge/config.k9.ncl b/panel-clades/clades/editor-bridge/config.k9.ncl index 39d0385a..abe35ac0 100644 --- a/panel-clades/clades/editor-bridge/config.k9.ncl +++ b/panel-clades/clades/editor-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Editor Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/evangeliser/config.k9.ncl b/panel-clades/clades/evangeliser/config.k9.ncl index ba8f6063..4ff62837 100644 --- a/panel-clades/clades/evangeliser/config.k9.ncl +++ b/panel-clades/clades/evangeliser/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Evangeliser Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/exploratory-workbench/config.k9.ncl b/panel-clades/clades/exploratory-workbench/config.k9.ncl index 838bdd68..0d888b6a 100644 --- a/panel-clades/clades/exploratory-workbench/config.k9.ncl +++ b/panel-clades/clades/exploratory-workbench/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Exploratory Workbench Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/farm/config.k9.ncl b/panel-clades/clades/farm/config.k9.ncl index 3fe7a23a..4e718d84 100644 --- a/panel-clades/clades/farm/config.k9.ncl +++ b/panel-clades/clades/farm/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Farm Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/feedback-routing/config.k9.ncl b/panel-clades/clades/feedback-routing/config.k9.ncl index e482612f..4b8dcbf2 100644 --- a/panel-clades/clades/feedback-routing/config.k9.ncl +++ b/panel-clades/clades/feedback-routing/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Feedback Routing Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/fleet/config.k9.ncl b/panel-clades/clades/fleet/config.k9.ncl index 00f9e929..4e59db9e 100644 --- a/panel-clades/clades/fleet/config.k9.ncl +++ b/panel-clades/clades/fleet/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Fleet Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/floor-raise/config.k9.ncl b/panel-clades/clades/floor-raise/config.k9.ncl index c0a53fbb..c0f01e6c 100644 --- a/panel-clades/clades/floor-raise/config.k9.ncl +++ b/panel-clades/clades/floor-raise/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Floor Raise Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/functional-tester/config.k9.ncl b/panel-clades/clades/functional-tester/config.k9.ncl index d0d9c814..2286ee62 100644 --- a/panel-clades/clades/functional-tester/config.k9.ncl +++ b/panel-clades/clades/functional-tester/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Functional Tester Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/game-preview/config.k9.ncl b/panel-clades/clades/game-preview/config.k9.ncl index 2b034fa6..7ac717ff 100644 --- a/panel-clades/clades/game-preview/config.k9.ncl +++ b/panel-clades/clades/game-preview/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Game Preview Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/generator-mode/config.k9.ncl b/panel-clades/clades/generator-mode/config.k9.ncl index eacbea9d..1dc3196c 100644 --- a/panel-clades/clades/generator-mode/config.k9.ncl +++ b/panel-clades/clades/generator-mode/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Generator Mode Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/gsa-actions/config.k9.ncl b/panel-clades/clades/gsa-actions/config.k9.ncl index fe774424..9e4cbbdd 100644 --- a/panel-clades/clades/gsa-actions/config.k9.ncl +++ b/panel-clades/clades/gsa-actions/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 { pedigree = { diff --git a/panel-clades/clades/gsa-browser/config.k9.ncl b/panel-clades/clades/gsa-browser/config.k9.ncl index d0303303..143e9122 100644 --- a/panel-clades/clades/gsa-browser/config.k9.ncl +++ b/panel-clades/clades/gsa-browser/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 { pedigree = { diff --git a/panel-clades/clades/gsa-config/config.k9.ncl b/panel-clades/clades/gsa-config/config.k9.ncl index 3dea2914..81875690 100644 --- a/panel-clades/clades/gsa-config/config.k9.ncl +++ b/panel-clades/clades/gsa-config/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 { pedigree = { diff --git a/panel-clades/clades/gsa-game/config.k9.ncl b/panel-clades/clades/gsa-game/config.k9.ncl index 2fb87977..66a3023a 100644 --- a/panel-clades/clades/gsa-game/config.k9.ncl +++ b/panel-clades/clades/gsa-game/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # Abstract game profile clade — children inherit this configuration { diff --git a/panel-clades/clades/gsa-health/config.k9.ncl b/panel-clades/clades/gsa-health/config.k9.ncl index ce0b80a1..6637ec62 100644 --- a/panel-clades/clades/gsa-health/config.k9.ncl +++ b/panel-clades/clades/gsa-health/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 { pedigree = { diff --git a/panel-clades/clades/gsa-history/config.k9.ncl b/panel-clades/clades/gsa-history/config.k9.ncl index 5d46f63d..76663a1c 100644 --- a/panel-clades/clades/gsa-history/config.k9.ncl +++ b/panel-clades/clades/gsa-history/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 { pedigree = { diff --git a/panel-clades/clades/gsa-logs/config.k9.ncl b/panel-clades/clades/gsa-logs/config.k9.ncl index 6242c750..e4300faa 100644 --- a/panel-clades/clades/gsa-logs/config.k9.ncl +++ b/panel-clades/clades/gsa-logs/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 { pedigree = { diff --git a/panel-clades/clades/gsa-search/config.k9.ncl b/panel-clades/clades/gsa-search/config.k9.ncl index bdb49abb..0c6a3d1b 100644 --- a/panel-clades/clades/gsa-search/config.k9.ncl +++ b/panel-clades/clades/gsa-search/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 { pedigree = { diff --git a/panel-clades/clades/gsa/config.k9.ncl b/panel-clades/clades/gsa/config.k9.ncl index 030cb3cb..4aea486e 100644 --- a/panel-clades/clades/gsa/config.k9.ncl +++ b/panel-clades/clades/gsa/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # K9 kennel configuration for GSA root panel clade { diff --git a/panel-clades/clades/guard-ai-tuner/config.k9.ncl b/panel-clades/clades/guard-ai-tuner/config.k9.ncl index d39478d3..253539d5 100644 --- a/panel-clades/clades/guard-ai-tuner/config.k9.ncl +++ b/panel-clades/clades/guard-ai-tuner/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Guard AI Tuner Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/help/config.k9.ncl b/panel-clades/clades/help/config.k9.ncl index 88fc5b3e..6456d1a8 100644 --- a/panel-clades/clades/help/config.k9.ncl +++ b/panel-clades/clades/help/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Help Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/hypatia/config.k9.ncl b/panel-clades/clades/hypatia/config.k9.ncl index 88a5b5b4..4e381d09 100644 --- a/panel-clades/clades/hypatia/config.k9.ncl +++ b/panel-clades/clades/hypatia/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Hypatia Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/interfaces/config.k9.ncl b/panel-clades/clades/interfaces/config.k9.ncl index 6a245853..60987198 100644 --- a/panel-clades/clades/interfaces/config.k9.ncl +++ b/panel-clades/clades/interfaces/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Interfaces Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/language-forge/config.k9.ncl b/panel-clades/clades/language-forge/config.k9.ncl index 4f029494..4c935c32 100644 --- a/panel-clades/clades/language-forge/config.k9.ncl +++ b/panel-clades/clades/language-forge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Language Forge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/level-architect/config.k9.ncl b/panel-clades/clades/level-architect/config.k9.ncl index 01f693e0..c2b2ff31 100644 --- a/panel-clades/clades/level-architect/config.k9.ncl +++ b/panel-clades/clades/level-architect/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Level Architect Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/load-tester/config.k9.ncl b/panel-clades/clades/load-tester/config.k9.ncl index c1d86b76..beec7266 100644 --- a/panel-clades/clades/load-tester/config.k9.ncl +++ b/panel-clades/clades/load-tester/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Load Tester Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/manifest-coverage/config.k9.ncl b/panel-clades/clades/manifest-coverage/config.k9.ncl index c40732f6..0f56e9ac 100644 --- a/panel-clades/clades/manifest-coverage/config.k9.ncl +++ b/panel-clades/clades/manifest-coverage/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Manifest Coverage Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/mass-panic/config.k9.ncl b/panel-clades/clades/mass-panic/config.k9.ncl index 41c65dce..6e998e2a 100644 --- a/panel-clades/clades/mass-panic/config.k9.ncl +++ b/panel-clades/clades/mass-panic/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Mass Panic Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/merge-coordinator/config.k9.ncl b/panel-clades/clades/merge-coordinator/config.k9.ncl index 3578ab64..0e83646d 100644 --- a/panel-clades/clades/merge-coordinator/config.k9.ncl +++ b/panel-clades/clades/merge-coordinator/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Merge Coordinator Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/migration/config.k9.ncl b/panel-clades/clades/migration/config.k9.ncl index a8b86d3b..d32632d6 100644 --- a/panel-clades/clades/migration/config.k9.ncl +++ b/panel-clades/clades/migration/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Migration Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/minter/config.k9.ncl b/panel-clades/clades/minter/config.k9.ncl index a2b4d742..cb5a195d 100644 --- a/panel-clades/clades/minter/config.k9.ncl +++ b/panel-clades/clades/minter/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Minter Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/multiplayer-monitor/config.k9.ncl b/panel-clades/clades/multiplayer-monitor/config.k9.ncl index aed23d26..41ee56ef 100644 --- a/panel-clades/clades/multiplayer-monitor/config.k9.ncl +++ b/panel-clades/clades/multiplayer-monitor/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Multiplayer Monitor Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/my-lang/config.k9.ncl b/panel-clades/clades/my-lang/config.k9.ncl index a063b70a..d695b516 100644 --- a/panel-clades/clades/my-lang/config.k9.ncl +++ b/panel-clades/clades/my-lang/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: My-Lang Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/network-topology/config.k9.ncl b/panel-clades/clades/network-topology/config.k9.ncl index 92ec72b3..c11ca57e 100644 --- a/panel-clades/clades/network-topology/config.k9.ncl +++ b/panel-clades/clades/network-topology/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Network Topology Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/neurosym-bridge/config.k9.ncl b/panel-clades/clades/neurosym-bridge/config.k9.ncl index fb856382..69291709 100644 --- a/panel-clades/clades/neurosym-bridge/config.k9.ncl +++ b/panel-clades/clades/neurosym-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Neurosymbolic Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/observatory/config.k9.ncl b/panel-clades/clades/observatory/config.k9.ncl index 7fd8f7ef..7bd41607 100644 --- a/panel-clades/clades/observatory/config.k9.ncl +++ b/panel-clades/clades/observatory/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Observatory Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/panic-attack/config.k9.ncl b/panel-clades/clades/panic-attack/config.k9.ncl index bbff0777..d5a6532b 100644 --- a/panel-clades/clades/panic-attack/config.k9.ncl +++ b/panel-clades/clades/panic-attack/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: panic-attack Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/performance-profiler/config.k9.ncl b/panel-clades/clades/performance-profiler/config.k9.ncl index 41f21f74..fde797ae 100644 --- a/panel-clades/clades/performance-profiler/config.k9.ncl +++ b/panel-clades/clades/performance-profiler/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Performance Profiler Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/playgrounds/config.k9.ncl b/panel-clades/clades/playgrounds/config.k9.ncl index d0a71553..f81a81ec 100644 --- a/panel-clades/clades/playgrounds/config.k9.ncl +++ b/panel-clades/clades/playgrounds/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Playgrounds Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/playtest-recorder/config.k9.ncl b/panel-clades/clades/playtest-recorder/config.k9.ncl index ed35c934..9bb0200c 100644 --- a/panel-clades/clades/playtest-recorder/config.k9.ncl +++ b/panel-clades/clades/playtest-recorder/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Playtest Recorder Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/plaza/config.k9.ncl b/panel-clades/clades/plaza/config.k9.ncl index 56edf15c..17816f3d 100644 --- a/panel-clades/clades/plaza/config.k9.ncl +++ b/panel-clades/clades/plaza/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Palimpsest Plaza Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/proofs-bridge/config.k9.ncl b/panel-clades/clades/proofs-bridge/config.k9.ncl index 87dbff7a..2e369aa0 100644 --- a/panel-clades/clades/proofs-bridge/config.k9.ncl +++ b/panel-clades/clades/proofs-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Proofs Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/protocol-bridge/config.k9.ncl b/panel-clades/clades/protocol-bridge/config.k9.ncl index 36b3c9ae..5225b7d6 100644 --- a/panel-clades/clades/protocol-bridge/config.k9.ncl +++ b/panel-clades/clades/protocol-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Protocol Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/protocol-squisher/config.k9.ncl b/panel-clades/clades/protocol-squisher/config.k9.ncl index eedd28ae..7b290bc4 100644 --- a/panel-clades/clades/protocol-squisher/config.k9.ncl +++ b/panel-clades/clades/protocol-squisher/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Protocol-Squisher Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/proven-adoption/config.k9.ncl b/panel-clades/clades/proven-adoption/config.k9.ncl index cbb62b9f..c4d1338f 100644 --- a/panel-clades/clades/proven-adoption/config.k9.ncl +++ b/panel-clades/clades/proven-adoption/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Proven Adoption Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/provisioner/config.k9.ncl b/panel-clades/clades/provisioner/config.k9.ncl index dbe63bf8..73f0b0f9 100644 --- a/panel-clades/clades/provisioner/config.k9.ncl +++ b/panel-clades/clades/provisioner/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Provisioner Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/regression-guard/config.k9.ncl b/panel-clades/clades/regression-guard/config.k9.ncl index 3fe35cd5..49356de4 100644 --- a/panel-clades/clades/regression-guard/config.k9.ncl +++ b/panel-clades/clades/regression-guard/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Regression Guard Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/release-manager/config.k9.ncl b/panel-clades/clades/release-manager/config.k9.ncl index 76df2c3d..95fa63a3 100644 --- a/panel-clades/clades/release-manager/config.k9.ncl +++ b/panel-clades/clades/release-manager/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Release Manager Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/repoloader/config.k9.ncl b/panel-clades/clades/repoloader/config.k9.ncl index c4c8f4f2..7ad8a806 100644 --- a/panel-clades/clades/repoloader/config.k9.ncl +++ b/panel-clades/clades/repoloader/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Repo Loader Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/reposystem/config.k9.ncl b/panel-clades/clades/reposystem/config.k9.ncl index fe0abd61..7a6f1906 100644 --- a/panel-clades/clades/reposystem/config.k9.ncl +++ b/panel-clades/clades/reposystem/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Reposystem Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/script-gist/config.k9.ncl b/panel-clades/clades/script-gist/config.k9.ncl index fe5369fc..b1fdb17b 100644 --- a/panel-clades/clades/script-gist/config.k9.ncl +++ b/panel-clades/clades/script-gist/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Script Gist Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/scripting-bridge/config.k9.ncl b/panel-clades/clades/scripting-bridge/config.k9.ncl index 47a2a81c..a799f7e0 100644 --- a/panel-clades/clades/scripting-bridge/config.k9.ncl +++ b/panel-clades/clades/scripting-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Scripting Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/security/config.k9.ncl b/panel-clades/clades/security/config.k9.ncl index 86179cf9..7933fcaf 100644 --- a/panel-clades/clades/security/config.k9.ncl +++ b/panel-clades/clades/security/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Security Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/soak-monitor/config.k9.ncl b/panel-clades/clades/soak-monitor/config.k9.ncl index 046c4581..3d8575c4 100644 --- a/panel-clades/clades/soak-monitor/config.k9.ncl +++ b/panel-clades/clades/soak-monitor/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Soak Monitor Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/spec-browser/config.k9.ncl b/panel-clades/clades/spec-browser/config.k9.ncl index 0a32081a..7e49107b 100644 --- a/panel-clades/clades/spec-browser/config.k9.ncl +++ b/panel-clades/clades/spec-browser/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Spec Browser Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/strategy-drift/config.k9.ncl b/panel-clades/clades/strategy-drift/config.k9.ncl index 603306b1..1d208115 100644 --- a/panel-clades/clades/strategy-drift/config.k9.ncl +++ b/panel-clades/clades/strategy-drift/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Strategy Drift Panel Configuration # SPDX-License-Identifier: MPL-2.0 # diff --git a/panel-clades/clades/tangle-viz/config.k9.ncl b/panel-clades/clades/tangle-viz/config.k9.ncl index cb406ec5..122df811 100644 --- a/panel-clades/clades/tangle-viz/config.k9.ncl +++ b/panel-clades/clades/tangle-viz/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Tangle Viz Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/team-dashboard/config.k9.ncl b/panel-clades/clades/team-dashboard/config.k9.ncl index 8fc493d4..c6921e49 100644 --- a/panel-clades/clades/team-dashboard/config.k9.ncl +++ b/panel-clades/clades/team-dashboard/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Team Dashboard Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/tentacles/config.k9.ncl b/panel-clades/clades/tentacles/config.k9.ncl index 934c9ad9..653b2e02 100644 --- a/panel-clades/clades/tentacles/config.k9.ncl +++ b/panel-clades/clades/tentacles/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: 7-Tentacles Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/tsdm/config.k9.ncl b/panel-clades/clades/tsdm/config.k9.ncl index 4ce89fd0..38692498 100644 --- a/panel-clades/clades/tsdm/config.k9.ncl +++ b/panel-clades/clades/tsdm/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: TSDM Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/typell/config.k9.ncl b/panel-clades/clades/typell/config.k9.ncl index ccdf2b27..0e5bd276 100644 --- a/panel-clades/clades/typell/config.k9.ncl +++ b/panel-clades/clades/typell/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: TypeLL Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/typing-bridge/config.k9.ncl b/panel-clades/clades/typing-bridge/config.k9.ncl index f2c4fb30..f9795463 100644 --- a/panel-clades/clades/typing-bridge/config.k9.ncl +++ b/panel-clades/clades/typing-bridge/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Typing Bridge Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/ums/config.k9.ncl b/panel-clades/clades/ums/config.k9.ncl index 7c90388e..fe1a5ea8 100644 --- a/panel-clades/clades/ums/config.k9.ncl +++ b/panel-clades/clades/ums/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Universal Modding Studio Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/unit-test-runner/config.k9.ncl b/panel-clades/clades/unit-test-runner/config.k9.ncl index 4ce2f55d..f63e9ccd 100644 --- a/panel-clades/clades/unit-test-runner/config.k9.ncl +++ b/panel-clades/clades/unit-test-runner/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Unit Test Runner Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/vab/config.k9.ncl b/panel-clades/clades/vab/config.k9.ncl index af241d40..40674a08 100644 --- a/panel-clades/clades/vab/config.k9.ncl +++ b/panel-clades/clades/vab/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: VAB Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/valence-shell/config.k9.ncl b/panel-clades/clades/valence-shell/config.k9.ncl index a25b4fbc..5165833e 100644 --- a/panel-clades/clades/valence-shell/config.k9.ncl +++ b/panel-clades/clades/valence-shell/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Valence Shell Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/verification-dashboard/config.k9.ncl b/panel-clades/clades/verification-dashboard/config.k9.ncl index 92a5c274..36a705ec 100644 --- a/panel-clades/clades/verification-dashboard/config.k9.ncl +++ b/panel-clades/clades/verification-dashboard/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Verification Dashboard Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/verisim-feeds/config.k9.ncl b/panel-clades/clades/verisim-feeds/config.k9.ncl index 7a17d4ba..22982e66 100644 --- a/panel-clades/clades/verisim-feeds/config.k9.ncl +++ b/panel-clades/clades/verisim-feeds/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: VeriSimDB Feeds Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/vexometer-friction/config.k9.ncl b/panel-clades/clades/vexometer-friction/config.k9.ncl index 48354f88..ddcac08f 100644 --- a/panel-clades/clades/vexometer-friction/config.k9.ncl +++ b/panel-clades/clades/vexometer-friction/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Vexometer Friction Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/vm-inspector/config.k9.ncl b/panel-clades/clades/vm-inspector/config.k9.ncl index fcf74d68..149eea85 100644 --- a/panel-clades/clades/vm-inspector/config.k9.ncl +++ b/panel-clades/clades/vm-inspector/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: VM Inspector Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/voicetag/config.k9.ncl b/panel-clades/clades/voicetag/config.k9.ncl index 4fb02904..66ec5a8e 100644 --- a/panel-clades/clades/voicetag/config.k9.ncl +++ b/panel-clades/clades/voicetag/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Code MRI Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/wiring-inspector/config.k9.ncl b/panel-clades/clades/wiring-inspector/config.k9.ncl index d4c68965..fe55b888 100644 --- a/panel-clades/clades/wiring-inspector/config.k9.ncl +++ b/panel-clades/clades/wiring-inspector/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Wiring Inspector Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/clades/workspace/config.k9.ncl b/panel-clades/clades/workspace/config.k9.ncl index 115cd868..8c90a5a5 100644 --- a/panel-clades/clades/workspace/config.k9.ncl +++ b/panel-clades/clades/workspace/config.k9.ncl @@ -1,3 +1,4 @@ +K9! # K9 Kennel: Workspace Panel Configuration # Auto-generated from PanelRegistry — pure data, no execution # SPDX-License-Identifier: MPL-2.0 diff --git a/panel-clades/container/deploy.k9.ncl b/panel-clades/container/deploy.k9.ncl index 0ad0d04a..407821b7 100644 --- a/panel-clades/container/deploy.k9.ncl +++ b/panel-clades/container/deploy.k9.ncl @@ -1,3 +1,4 @@ +K9! # SPDX-License-Identifier: MPL-2.0 # deploy.k9.ncl — {{PROJECT_NAME}} deployment component (Hunt level) # @@ -12,61 +13,6 @@ # k9-svc validate container/deploy.k9.ncl # k9-svc deploy container/deploy.k9.ncl --env production -# The component's pedigree (self-description across five layers) -let component_pedigree = { - # ───────────────────────────────────────────────────────────── - # L1: The Snout — Identity - # ───────────────────────────────────────────────────────────── - metadata = { - name = "{{SERVICE_NAME}}-deploy", - version = "{{VERSION}}", - breed = "application/vnd.k9+nickel", - magic_number = "K9!", - description = "{{PROJECT_NAME}} deployment component (Hunt level)", - }, - - # ───────────────────────────────────────────────────────────── - # L2: The Scent — Target Environment - # ───────────────────────────────────────────────────────────── - target = { - os = 'Linux, - is_edge = false, - requires_podman = true, - min_memory_mb = 256, - }, - - # ───────────────────────────────────────────────────────────── - # L3: The Leash — Security - # ───────────────────────────────────────────────────────────── - security = { - trust_level = 'Hunt, - allow_network = true, - allow_filesystem_write = true, - allow_subprocess = true, - # In production, replace with a real Ed25519 signature. - signature = "PLACEHOLDER-SIGNATURE-REQUIRED-FOR-HUNT", - }, - - # ───────────────────────────────────────────────────────────── - # L4: The Gut — Self-Validation - # ───────────────────────────────────────────────────────────── - validation = { - checksum = "sha256:placeholder", - pedigree_version = "1.0.0", - hunt_authorized = false, # Must be set true after handshake - }, - - # ───────────────────────────────────────────────────────────── - # L5: The Muscle — Deployment Recipes - # ───────────────────────────────────────────────────────────── - recipes = { - install = "just container-build", - validate = "just container-verify", - deploy = "just container-up", - migrate = "just container-build && just container-up", - }, -} in - # Deployment configuration let deployment = { # Target environments (dev / staging / production) @@ -143,7 +89,59 @@ echo "K9: Rollback complete." # Export the component { - pedigree = component_pedigree, + pedigree = { + # ───────────────────────────────────────────────────────────── + # L1: The Snout — Identity + # ───────────────────────────────────────────────────────────── + metadata = { + name = "{{SERVICE_NAME}}-deploy", + version = "{{VERSION}}", + breed = "application/vnd.k9+nickel", + magic_number = "K9!", + description = "{{PROJECT_NAME}} deployment component (Hunt level)", + }, + + # ───────────────────────────────────────────────────────────── + # L2: The Scent — Target Environment + # ───────────────────────────────────────────────────────────── + target = { + os = 'Linux, + is_edge = false, + requires_podman = true, + min_memory_mb = 256, + }, + + # ───────────────────────────────────────────────────────────── + # L3: The Leash — Security + # ───────────────────────────────────────────────────────────── + security = { + trust_level = 'Hunt, + allow_network = true, + allow_filesystem_write = true, + allow_subprocess = true, + # In production, replace with a real Ed25519 signature. + signature = "PLACEHOLDER-SIGNATURE-REQUIRED-FOR-HUNT", + }, + + # ───────────────────────────────────────────────────────────── + # L4: The Gut — Self-Validation + # ───────────────────────────────────────────────────────────── + validation = { + checksum = "sha256:placeholder", + pedigree_version = "1.0.0", + hunt_authorized = false, # Must be set true after handshake + }, + + # ───────────────────────────────────────────────────────────── + # L5: The Muscle — Deployment Recipes + # ───────────────────────────────────────────────────────────── + recipes = { + install = "just container-build", + validate = "just container-verify", + deploy = "just container-up", + migrate = "just container-build && just container-up", + }, + }, deployment = deployment, scripts = scripts, diff --git a/panel-clades/scripts/check-abi.sh b/panel-clades/scripts/check-abi.sh index eae25593..5502a698 100755 --- a/panel-clades/scripts/check-abi.sh +++ b/panel-clades/scripts/check-abi.sh @@ -23,8 +23,11 @@ ROOT="$(pwd)" OUT="_build/check-abi" WRONG_REASON='Undefined name|Couldn.t parse|Parse error|not in the source directory|Can.t find import|Module .* not found|INTERNAL ERROR|does not match file name' fail=0 +# Print the supplied success message to standard output with a PASS prefix. pass() { printf 'PASS: %s\n' "$1"; } +# Print the supplied failure message and set fail=1, then continue checking. err() { printf 'FAIL: %s\n' "$1"; fail=1; } +# Print the supplied failure message and terminate the gate with exit status 1. die() { printf 'FAIL: %s\n' "$1"; exit 1; } command -v idris2 >/dev/null || die "idris2 not on PATH (a gate that cannot run must not report OK)" @@ -33,15 +36,16 @@ case "$iv" in *"version 0.8.0"*) ;; *) [ -n "${ALLOW_ANY_IDRIS2:-}" ] || die "Id rm -rf "$OUT"; mkdir -p "$OUT" IPKG="src/abi/panel-clades-grades.ipkg" -for f in src/abi/PanelClades/ABI/*.idr; do +mapfile -d '' -t abi_files < <(find src/abi/PanelClades -type f -name '*.idr' -print0) +for f in "${abi_files[@]}"; do mod="$(printf '%s' "${f#src/abi/}" | sed 's|\.idr$||; s|/|.|g')" grep -qE "^[[:space:]]*(modules[[:space:]]*=|,)[[:space:]]*${mod//./\\.}[[:space:]]*$" "$IPKG" \ || err "$mod is not listed in $IPKG (it would never be checked)" done -if grep -nE '\b(believe_me|assert_total|assert_smaller|idris_crash|unsafePerformIO)\b' src/abi/PanelClades/ABI/*.idr; then - err "escape hatch in src/abi/PanelClades/ABI (lines above)" +if [ "${#abi_files[@]}" -gt 0 ] && grep -nE '\b(believe_me|assert_total|assert_smaller|idris_crash|unsafePerformIO)\b' "${abi_files[@]}"; then + err "escape hatch in src/abi/PanelClades (lines above)" fi -[ "$fail" -eq 0 ] && pass "every PanelClades/ABI module is listed in the ipkg; no escape hatches" +[ "$fail" -eq 0 ] && pass "every PanelClades module is listed in the ipkg; no escape hatches" if bash scripts/gen-budgets.sh --check; then pass "Budgets.idr is current with the clade configs" else diff --git a/panel-clades/scripts/gen-budgets.sh b/panel-clades/scripts/gen-budgets.sh index 070604ff..3f88299f 100755 --- a/panel-clades/scripts/gen-budgets.sh +++ b/panel-clades/scripts/gen-budgets.sh @@ -27,12 +27,16 @@ set -euo pipefail cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." OUT="src/abi/PanelClades/ABI/Budgets.idr" mode="${1:-write}" +# Write the supplied diagnostic to standard error and exit with status 1. fail() { printf 'gen-budgets: %s\n' "$1" >&2; exit 1; } # kebab-case clade id -> lowerCamelCase Idris name camel() { printf '%s' "$1" | sed -E 's/-([a-z0-9])/\U\1/g'; } nat='[0-9]+' +# Emit the Idris budget module to standard output from clade resources blocks. +# Exit with status 1 if a block fails the state, crossing or DESIGNED status +# checks, or if no config declares resources. Configs without resources are skipped. emit() { cat <<'HEADER' -- SPDX-License-Identifier: MPL-2.0 @@ -68,13 +72,14 @@ HEADER grep -qE '^[[:space:]]*resources[[:space:]]*=' "$cfg" || continue dir="$(basename -- "$(dirname -- "$cfg")")" id="$(camel "$dir")" - state="$(grep -E "^[[:space:]]*state = \{ peak = $nat, drift = $nat, budget = $nat \},[[:space:]]*$" "$cfg" || true)" - crossing="$(grep -E "^[[:space:]]*crossing = \{ loss = $nat, tolerance = $nat \},[[:space:]]*$" "$cfg" || true)" + block="$(sed -n '/^[[:space:]]*resources[[:space:]]*=/,/^[[:space:]]*},[[:space:]]*$/p' "$cfg")" + state="$(printf '%s\n' "$block" | grep -E "^[[:space:]]*state = \{ peak = $nat, drift = $nat, budget = $nat \},[[:space:]]*$" || true)" + crossing="$(printf '%s\n' "$block" | grep -E "^[[:space:]]*crossing = \{ loss = $nat, tolerance = $nat \},[[:space:]]*$" || true)" [ "$(printf '%s\n' "$state" | grep -c .)" -eq 1 ] \ || fail "$cfg: resources.state is not one line of the form { peak = n, drift = n, budget = n }" [ "$(printf '%s\n' "$crossing" | grep -c .)" -eq 1 ] \ || fail "$cfg: resources.crossing is not one line of the form { loss = n, tolerance = n }" - grep -qE '^[[:space:]]*status = "DESIGNED",' "$cfg" \ + printf '%s\n' "$block" | grep -qE '^[[:space:]]*status = "DESIGNED",' \ || fail "$cfg: resources.status must be \"DESIGNED\" (nothing measures these values yet)" read -r peak drift budget < <(printf '%s\n' "$state" | sed -E 's/.*peak = ([0-9]+), drift = ([0-9]+), budget = ([0-9]+).*/\1 \2 \3/') read -r loss tolerance < <(printf '%s\n' "$crossing" | sed -E 's/.*loss = ([0-9]+), tolerance = ([0-9]+).*/\1 \2/') diff --git a/panel-clades/src/abi/PanelClades/ABI/Foreign.idr b/panel-clades/src/abi/PanelClades/ABI/Foreign.idr index 87401dd7..0b48e0a8 100644 --- a/panel-clades/src/abi/PanelClades/ABI/Foreign.idr +++ b/panel-clades/src/abi/PanelClades/ABI/Foreign.idr @@ -109,8 +109,10 @@ export %foreign "C:panel_clades_load_clade, libpanel_clades" prim__loadClade : Bits64 -> String -> PrimIO Bits32 -||| Safely load a clade definition into the library context. -||| Returns Ok on success or an error Result on failure. +||| Submit a clade identifier to the library. The current FFI validates +||| that it is non-empty but does not store a clade definition. +||| Returns Right () for Ok, Left with a recognised error Result, or +||| Left Error for an unknown result code. export loadClade : Handle -> String -> IO (Either Result ()) loadClade h cladeIdStr = do @@ -164,7 +166,12 @@ export %foreign "C:panel_clades_process_array, libpanel_clades" prim__processArray : Bits64 -> Bits64 -> Bits32 -> PrimIO Bits32 -||| Safe array processor +||| Submit a buffer address and its length in bytes to the library. +||| The caller must supply memory covering that length; this wrapper +||| does not check the buffer or its bounds. The current FFI validates +||| the pointers and handle state but does not process the contents. +||| Returns Right () for Ok, Left with a recognised error Result, or +||| Left Error for an unknown result code. export processArray : Handle -> (buffer : Bits64) -> (len : Bits32) -> IO (Either Result ()) processArray h buf len = do diff --git a/panel-clades/src/abi/PanelClades/ABI/Grades.idr b/panel-clades/src/abi/PanelClades/ABI/Grades.idr index 4638cd70..db3d6948 100644 --- a/panel-clades/src/abi/PanelClades/ABI/Grades.idr +++ b/panel-clades/src/abi/PanelClades/ABI/Grades.idr @@ -174,7 +174,7 @@ declaredState d = MkHWM (peak d) (drift d) (fits (drift d) (peak d)) ||| A clade's contract built from its config alone. It typechecks exactly ||| when the declared peak fits the declared budget and the declared loss -||| fits the declared tolerance. +||| fits the declared tolerance, with declared drift no greater than peak. public export declaredContract : (cladeId : String) -> (d : DeclaredResources) -> {auto okDrift : So (lte (drift d) (peak d))} diff --git a/panel-clades/src/abi/PanelClades/ABI/Layout.idr b/panel-clades/src/abi/PanelClades/ABI/Layout.idr index f92ced41..0163ea50 100644 --- a/panel-clades/src/abi/PanelClades/ABI/Layout.idr +++ b/panel-clades/src/abi/PanelClades/ABI/Layout.idr @@ -40,6 +40,7 @@ data Divides : Nat -> Nat -> Type where ||| Units of `unit` bytes needed to cover `size` bytes, counting down a ||| fuel bound. Structural, so it computes during type checking (Nat `div` ||| does not). With fuel ≥ size and unit ≥ 1 the fuel never runs out. +||| The result is capped at fuel; for unit = 0 and size > 0 it is fuel. public export unitsFor : (fuel : Nat) -> (size : Nat) -> (unit : Nat) -> Nat unitsFor Z _ _ = Z @@ -54,11 +55,14 @@ alignUnits _ Z = Z alignUnits size (S align) = unitsFor size size (S align) ||| Round up to the next alignment boundary: a whole number of units. +||| Returns a byte count, unchanged when already aligned, or 0 when +||| the alignment is 0. public export alignUp : (size : Nat) -> (alignment : Nat) -> Nat alignUp size alignment = alignUnits size alignment * alignment ||| Padding needed after `offset` to reach the next boundary. +||| Returns bytes; 0 when already aligned or when the alignment is 0. public export paddingFor : (offset : Nat) -> (alignment : Nat) -> Nat paddingFor offset alignment = alignUp offset alignment `minus` offset @@ -105,7 +109,7 @@ public export nextFieldOffset : Field -> Nat nextFieldOffset f = alignUp (fieldEnd f) f.alignment -||| The furthest byte any field reaches +||| The greatest field end offset in bytes, or 0 for an empty list. public export structEnd : List Field -> Nat structEnd = foldr (\f, acc => max (fieldEnd f) acc) 0 @@ -114,6 +118,7 @@ structEnd = foldr (\f, acc => max (fieldEnd f) acc) 0 ||| alignment. (Fields carry explicit offsets, so this is the C rule; the ||| earlier fold here ignored its accumulator and mixed up which field it ||| measured.) +||| Returns bytes; 0 for an empty field list or an alignment of 0. public export calcStructSize : List Field -> Nat -> Nat calcStructSize fields align = alignUp (structEnd fields) align @@ -149,6 +154,8 @@ data FieldsAligned : List Field -> Type where ||| Build a layout whose size is computed from its fields; refused when ||| the computed size does not cover them. +||| Returns Right with the layout, or Left "Invalid struct size". +||| Field offsets are checked separately by `checkCABI`. public export verifyLayout : (fields : List Field) -> (align : Nat) -> Either String StructLayout verifyLayout fields align = @@ -185,7 +192,8 @@ proveFieldsAligned (f :: rest) = Left err => Left err Right restProof => Right (ConsField f rest here restProof) -||| Check if layout follows C ABI +||| Return a proof that every field offset is a multiple of its alignment, +||| or propagate the first field-alignment error from `proveFieldsAligned`. public export checkCABI : (layout : StructLayout) -> Either String (CABICompliant layout) checkCABI layout = @@ -204,12 +212,14 @@ PlatformLayout _ _ = StructLayout ||| Check a per-platform layout on every platform in `allPlatforms` ||| (this used to return `Right ()` without looking). +||| Returns Right () if all pass, or the first `checkCABI` error in that order. public export verifyAllPlatforms : (layouts : (p : Platform) -> PlatformLayout p t) -> Either String () verifyAllPlatforms layouts = go allPlatforms where + ||| Check the remaining platforms, stopping at the first alignment error. go : List Platform -> Either String () go [] = Right () go (p :: ps) = case checkCABI (layouts p) of @@ -253,6 +263,7 @@ exampleFieldsAligned = (DivideBy 2 Refl) NoFields)) +||| Prove that every field in the example layout is correctly aligned. export exampleLayoutValid : CABICompliant PanelClades.ABI.Layout.exampleLayout exampleLayoutValid = CABIOk exampleLayout exampleFieldsAligned @@ -262,6 +273,7 @@ exampleLayoutValid = CABIOk exampleLayout exampleFieldsAligned -------------------------------------------------------------------------------- ||| Find a field by name. +||| Returns the first exact match, or Nothing if no field has that name. public export lookupField : (layout : StructLayout) -> (fieldName : String) -> Maybe Field lookupField layout name = find (\f => f.name == name) layout.fields diff --git a/panel-clades/src/abi/PanelClades/ABI/Types.idr b/panel-clades/src/abi/PanelClades/ABI/Types.idr index a948b9c8..c91db0f5 100644 --- a/panel-clades/src/abi/PanelClades/ABI/Types.idr +++ b/panel-clades/src/abi/PanelClades/ABI/Types.idr @@ -93,6 +93,7 @@ resultTag InvalidParam = 2 resultTag OutOfMemory = 3 resultTag NullPointer = 4 +||| Decode a natural-number result tag; return Nothing for tags above 4. public export resultFromTag : Nat -> Maybe Result resultFromTag 0 = Just Ok @@ -102,6 +103,7 @@ resultFromTag 3 = Just OutOfMemory resultFromTag 4 = Just NullPointer resultFromTag _ = Nothing +||| Prove that decoding a result's natural-number tag recovers that result. public export resultTagRetract : (r : Result) -> resultFromTag (resultTag r) = Just r resultTagRetract Ok = Refl @@ -360,6 +362,7 @@ cladeKindTag Inspector = 10 cladeKindTag Bridge = 11 cladeKindTag Terminal = 12 +||| Decode a natural-number clade tag; return Nothing for tags above 12. public export cladeKindFromTag : Nat -> Maybe CladeKind cladeKindFromTag 0 = Just Directive @@ -377,6 +380,7 @@ cladeKindFromTag 11 = Just Bridge cladeKindFromTag 12 = Just Terminal cladeKindFromTag _ = Nothing +||| Prove that decoding a kind's natural-number tag recovers that kind. public export cladeKindTagRetract : (k : CladeKind) -> cladeKindFromTag (cladeKindTag k) = Just k cladeKindTagRetract Directive = Refl @@ -465,6 +469,7 @@ namespace Verify ptrLinux : HasSize Linux CTPtr 8 ptrLinux = SizeIs + ||| Prove that a WASM pointer occupies 4 bytes in this ABI. export ptrWasm : HasSize WASM CTPtr 4 ptrWasm = SizeIs