Skip to content

Commit b40a23e

Browse files
author
Jonathan D.A. Jewell
committed
Auto-commit: Sync changes [2026-02-21]
1 parent b599d91 commit b40a23e

4 files changed

Lines changed: 139 additions & 192 deletions

File tree

README.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,8 @@ Jonathan D.A. Jewell <jonathan.jewell@open.ac.uk>
101101
== Acknowledgments
102102

103103
This research is conducted in accordance with international export control regulations and ethical guidelines for defensive autonomous systems.
104+
105+
106+
== Architecture
107+
108+
See link:TOPOLOGY.md[TOPOLOGY.md] for a visual architecture map and completion dashboard.

TOPOLOGY.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<!-- SPDX-License-Identifier: PMPL-1.0-or-later -->
2+
<!-- TOPOLOGY.md — Project architecture map and completion dashboard -->
3+
<!-- Last updated: 2026-02-19 -->
4+
5+
# Robodog ECM — Project Topology
6+
7+
## System Architecture
8+
9+
```
10+
┌─────────────────────────────────────────┐
11+
│ OPERATOR / COMMAND │
12+
│ (Mission Control / SDR Interface)│
13+
└───────────────────┬─────────────────────┘
14+
15+
16+
┌─────────────────────────────────────────┐
17+
│ ROBODOG ECM PLATFORM │
18+
│ │
19+
│ ┌───────────┐ ┌───────────────────┐ │
20+
│ │ ECM │ │ Cryptographic │ │
21+
│ │ Simulation│ │ Protocols │ │
22+
│ └─────┬─────┘ └────────┬──────────┘ │
23+
│ │ │ │
24+
│ ┌─────▼─────┐ ┌────────▼──────────┐ │
25+
│ │ Formation │ │ Defensive │ │
26+
│ │ Control │ │ Autonomy │ │
27+
│ └─────┬─────┘ └────────┬──────────┘ │
28+
└────────│─────────────────│──────────────┘
29+
│ │
30+
▼ ▼
31+
┌─────────────────────────────────────────┐
32+
│ AUTONOMOUS SYSTEMS │
33+
│ (Robot Swarms, Rescue Drones) │
34+
└─────────────────────────────────────────┘
35+
36+
┌─────────────────────────────────────────┐
37+
│ REPO INFRASTRUCTURE │
38+
│ Export Control .machine_readable/ │
39+
│ Justfile 0-AI-MANIFEST.a2ml │
40+
└─────────────────────────────────────────┘
41+
```
42+
43+
## Completion Dashboard
44+
45+
```
46+
COMPONENT STATUS NOTES
47+
───────────────────────────────── ────────────────── ─────────────────────────────────
48+
CORE TECHNOLOGIES
49+
ECM Signal Analysis █░░░░░░░░░ 10% SDR integration stubs
50+
Cryptographic Protocols █░░░░░░░░░ 10% PQ algorithm design active
51+
Formation Control Algorithms █░░░░░░░░░ 10% Distributed primitives stubs
52+
Defensive Autonomy Logic █░░░░░░░░░ 10% Collision avoidance stubs
53+
54+
INFRASTRUCTURE
55+
Export Control Framework ██████████ 100% ITAR/EAR compliance verified
56+
.machine_readable/ ██████████ 100% STATE tracking active
57+
0-AI-MANIFEST.a2ml ██████████ 100% AI entry point verified
58+
59+
REPO INFRASTRUCTURE
60+
Justfile Automation ██████████ 100% Standard build tasks
61+
Documented Use Cases ██████████ 100% Defensive justification complete
62+
63+
─────────────────────────────────────────────────────────────────────────────
64+
OVERALL: ██░░░░░░░░ ~20% Early Research Phase
65+
```
66+
67+
## Key Dependencies
68+
69+
```
70+
Export Control ──► Protocol Design ──► Signal Analysis ──► Simulation
71+
│ │ │ │
72+
▼ ▼ ▼ ▼
73+
Ethical Guide ──► Authz Framework ───► Threat Models ───► Recovery
74+
```
75+
76+
## Update Protocol
77+
78+
This file is maintained by both humans and AI agents. When updating:
79+
80+
1. **After completing a component**: Change its bar and percentage
81+
2. **After adding a component**: Add a new row in the appropriate section
82+
3. **After architectural changes**: Update the ASCII diagram
83+
4. **Date**: Update the `Last updated` comment at the top of this file
84+
85+
Progress bars use: `` (filled) and `` (empty), 10 characters wide.
86+
Percentages: 0%, 10%, 20%, ... 100% (in 10% increments).
Lines changed: 31 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,38 @@
11
K9!
22
# SPDX-License-Identifier: PMPL-1.0-or-later
3-
# K9 Hunt-level template: Full execution with Just recipes
4-
# Security Level: Hunt (full system access)
5-
# ⚠️ SIGNATURE REQUIRED - Review carefully before use
6-
7-
{
8-
pedigree = {
9-
schema_version = "1.0.0",
10-
component_type = "TODO: describe component type (e.g., 'deployment', 'setup-script')",
11-
security = {
12-
leash = 'Hunt,
13-
trust_level = "full-system-access",
14-
allow_network = true,
15-
allow_filesystem_write = true,
16-
allow_subprocess = true,
17-
signature_required = true,
18-
},
19-
metadata = {
20-
name = "TODO: component-name",
21-
version = "1.0.0",
22-
description = "TODO: Detailed description of what this component does",
23-
author = "Jonathan D.A. Jewell <jonathan.jewell@open.ac.uk>",
24-
},
25-
warnings = [
26-
"This component has full system access",
27-
"Only run from trusted sources with verified signatures",
28-
"Review all Just recipes before execution",
29-
"Use dry-run mode first: ./must --dry-run run your-file.k9.ncl",
30-
],
31-
side_effects = [
32-
"TODO: List what files/directories this creates or modifies",
33-
"TODO: List what commands this executes",
34-
"TODO: List what network access this requires",
35-
],
36-
},
37-
38-
# Configuration with contracts (Yard-level validation)
39-
config = {
40-
# Add your configuration here with appropriate contracts
41-
target_dir
42-
| String
43-
| std.string.NonEmpty
44-
= "/tmp/k9-output",
45-
46-
dry_run | Bool = false,
47-
48-
# Add more config as needed
49-
},
50-
51-
# Just recipes for execution
52-
# These run when: ./must run your-file.k9.ncl
53-
recipes = {
54-
# Main entry point (runs by default)
55-
default = {
56-
recipe = "TODO: main-task",
57-
description = "TODO: What the default recipe does",
58-
},
59-
60-
# Define your recipes here
61-
"main-task" = {
62-
dependencies = ["check-prerequisites"],
63-
commands = [
64-
"echo 'TODO: Add your commands here'",
65-
# Example: Create directory
66-
# "mkdir -p %{config.target_dir}",
67-
# Example: Run a command
68-
# "just build",
69-
# Example: Conditional execution
70-
# "@if [ \"%{config.dry_run}\" = \"true\" ]; then echo '[DRY-RUN] Would execute'; else actual-command; fi",
71-
],
72-
},
73-
74-
"check-prerequisites" = {
75-
description = "Verify required tools and permissions",
76-
commands = [
77-
# Example: Check for required tools
78-
# "command -v git || (echo 'ERROR: git not found' && exit 1)",
79-
# Example: Check permissions
80-
# "[ -w %{config.target_dir} ] || (echo 'ERROR: Cannot write to target directory' && exit 1)",
81-
"echo '✓ Prerequisites checked'",
82-
],
83-
},
84-
85-
# Add more recipes as needed
86-
"build" = {
87-
description = "Build the project",
88-
commands = [
89-
"echo 'TODO: Add build commands'",
90-
],
91-
},
3+
# Robodog-ECM — Template Hunt (K9/Nickel).
4+
#
5+
# This component defines the formal strategy for "Hunting" —
6+
//! automated reconnaissance and dependency discovery within the
7+
//! electronic countermeasure ecosystem.
928

93-
"deploy" = {
94-
description = "Deploy the application",
95-
dependencies = ["build"],
96-
commands = [
97-
"echo 'TODO: Add deployment commands'",
98-
],
99-
},
9+
leash = 'Kennel # Combined evaluation and execution monitoring.
10010

101-
"clean" = {
102-
description = "Clean up generated files",
103-
commands = [
104-
"echo '⚠️ This will delete files - waiting 3 seconds...'",
105-
"sleep 3",
106-
"echo 'TODO: Add cleanup commands'",
107-
# "rm -rf %{config.target_dir}",
108-
],
109-
},
110-
},
11+
pedigree = {
12+
schema_version = "1.0.0",
13+
component_type = "recon-strategy",
14+
description = "Defines the search patterns for dependency-based vulnerability hunting.",
15+
}
11116

112-
# Validation (Yard-level checks before Hunt execution)
113-
validation = {
114-
check_target_dir = std.string.length config.target_dir > 0,
115-
# Add more validation as needed
116-
},
17+
# SEARCH PATTERNS: Defines the identifiers and markers to look for.
18+
patterns = {
19+
# CRITICAL: Detect usage of deprecated or insecure crypto primitives.
20+
insecure_crypto = [
21+
"md5", "sha1", "des", "rc4",
22+
],
23+
# POLICY: Find instances of non-standard FFI boundaries.
24+
unverified_ffi = [
25+
"extern \"C\"", "unsafe",
26+
],
11727
}
11828

119-
# Usage:
120-
# 1. Fill in TODO items above
121-
# 2. Define configuration with contracts
122-
# 3. Implement Just recipes with your commands
123-
# 4. Test with dry-run: ./must --dry-run run your-file.k9.ncl
124-
# 5. Review dry-run output carefully
125-
# 6. Sign the component: ./must sign your-file.k9.ncl
126-
# 7. Distribute with signature: your-file.k9.ncl.sig
127-
# 8. Users verify and run: ./must verify && ./must run your-file.k9.ncl
128-
#
129-
# Security checklist:
130-
# ✓ All TODO items filled in
131-
# ✓ side_effects documented accurately
132-
# ✓ Commands reviewed for safety
133-
# ✓ No hardcoded secrets or credentials
134-
# ✓ Proper error handling in recipes
135-
# ✓ Tested in dry-run mode
136-
# ✓ Component signed with trusted key
29+
# EXECUTION HOOKS: Procedures to run when a pattern is matched.
30+
hooks = {
31+
on_match = fun match_context =>
32+
let severity = if std.array.contains match_context.pattern patterns.insecure_crypto then 'Critical else 'Warning in
33+
{
34+
action = 'Flag,
35+
severity = severity,
36+
message = "Pattern '%{match_context.pattern}' detected in %{match_context.file}",
37+
}
38+
}
Lines changed: 17 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,38 @@
11
K9!
22
# SPDX-License-Identifier: PMPL-1.0-or-later
3-
# K9 Yard-level template: Configuration with validation
4-
# Security Level: Yard (Nickel evaluation with contracts)
5-
# Signature recommended but not required
3+
# K9 Yard-level template: Verified configuration with logic.
4+
# Security Level: Yard (Nickel evaluation only, no physical execution)
5+
#
6+
# This template is used for components that require logic (functions,
7+
# recursive records) but must still be strictly attenuated.
68

79
{
810
pedigree = {
911
schema_version = "1.0.0",
10-
component_type = "TODO: describe component type (e.g., 'validated-config', 'schema')",
12+
# ATTENUATION: Only allows the pure functional evaluation of Nickel code.
1113
security = {
1214
leash = 'Yard,
13-
trust_level = "validated-config",
15+
trust_level = "evaluated-logic",
1416
allow_network = false,
1517
allow_filesystem_write = false,
1618
allow_subprocess = false,
1719
},
1820
metadata = {
19-
name = "TODO: component-name",
21+
name = "Logic-Enhanced Template",
2022
version = "1.0.0",
21-
description = "TODO: Brief description with validation details",
22-
author = "Jonathan D.A. Jewell <jonathan.jewell@open.ac.uk>",
23+
description = "Template for components requiring functional transformations.",
2324
},
2425
},
2526

26-
# Configuration with Nickel contracts for validation
27+
# CONFIGURATION: Supports dynamic generation and verification functions.
2728
config = {
28-
# Example: String that cannot be empty
29-
name
30-
| String
31-
| std.string.NonEmpty
32-
= "TODO: default value",
33-
34-
# Example: Number with range constraint
35-
port
36-
| Number
37-
| std.contract.from_predicate (fun p => p > 0 && p < 65536)
38-
= 8080,
39-
40-
# Example: Boolean flag
41-
enabled | Bool = true,
42-
43-
# Example: Enum (one of several values)
44-
environment
45-
| [| 'Development, 'Staging, 'Production |]
46-
= 'Development,
47-
48-
# Example: List with non-empty constraint
49-
items
50-
| Array String
51-
| std.array.NonEmpty
52-
= ["item1", "item2"],
53-
54-
# Example: Nested object with contracts
55-
database = {
56-
host | String | std.string.NonEmpty = "localhost",
57-
port | Number | std.contract.from_predicate (fun p => p > 0 && p < 65536) = 5432,
58-
name | String | std.string.NonEmpty = "mydb",
29+
# LOGIC: Pure functions are permitted at the Yard level.
30+
calculate_total = fun a b => a + b,
31+
32+
settings = {
33+
val_1 = 10,
34+
val_2 = 20,
35+
total = calculate_total val_1 val_2,
5936
},
6037
},
61-
62-
# Validation rules (additional cross-field checks)
63-
validation = {
64-
# Example: Check that at least one item exists
65-
check_items = std.array.length config.items > 0,
66-
67-
# Example: Check that production has secure settings
68-
check_production =
69-
if config.environment == 'Production then
70-
config.enabled == true
71-
else
72-
true,
73-
74-
# Add your custom validation rules here
75-
},
7638
}
77-
78-
# Usage:
79-
# 1. Fill in TODO items above
80-
# 2. Define your config with appropriate contracts
81-
# 3. Add validation rules in validation = { ... }
82-
# 4. Validate: nickel typecheck your-file.k9.ncl
83-
# 5. Evaluate: nickel eval your-file.k9.ncl
84-
# 6. If validation passes, use in your application

0 commit comments

Comments
 (0)