Skip to content

Commit 9f19368

Browse files
Testclaude
andcommitted
feat: integrate k9-svc and A2ML into poly-ssg
Added k9-svc contractile system with two levels: - Kennel (config/metadata.k9.ncl) - pure data configuration - Yard (config/ci.k9.ncl) - validated CI/CD configuration Added A2ML content: - content/index.a2ml - SSG comparison content in attested markup Updated build pipeline: - Added k9:validate task to typecheck contractiles with Nickel - Added k9:export task to export metadata to JSON - Added a2ml:render task to render A2ML content to HTML - Added build:all task that runs full pipeline Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
1 parent 7e74393 commit 9f19368

File tree

6 files changed

+300
-2
lines changed

6 files changed

+300
-2
lines changed

config/ci.k9.ncl

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# SPDX-License-Identifier: AGPL-3.0-or-later
2+
# K9 Contractile: Yard Level (Validated Config)
3+
# CI/CD configuration with Nickel contracts
4+
5+
let Port = std.contract.from_predicate (fun port =>
6+
std.is_number port && port >= 1 && port <= 65535
7+
) in
8+
9+
let NonEmptyString = std.contract.from_predicate (fun s =>
10+
std.is_string s && std.string.length s > 0
11+
) in
12+
13+
{
14+
leash = 'Yard,
15+
16+
ci = {
17+
provider = "GitHub Actions" | NonEmptyString,
18+
19+
triggers = {
20+
push = {
21+
branches | Array NonEmptyString = ["main", "develop"],
22+
},
23+
pull_request = {
24+
branches | Array NonEmptyString = ["main"],
25+
},
26+
},
27+
28+
build = {
29+
command | NonEmptyString = "deno task build",
30+
output_dir | NonEmptyString = "/",
31+
node_version = null, # Not using Node.js
32+
deno_version | NonEmptyString = "2.0+",
33+
},
34+
35+
test = {
36+
command | NonEmptyString = "deno task test",
37+
coverage = false, # TODO: Add coverage
38+
},
39+
40+
security = {
41+
hypatia_scan = true,
42+
codeql = true,
43+
scorecard = true,
44+
secret_scanning = true,
45+
dependency_review = true,
46+
},
47+
48+
deployment = {
49+
platform | NonEmptyString = "Cloudflare Pages",
50+
production_branch | NonEmptyString = "main",
51+
preview_branches | Array NonEmptyString = ["develop", "staging"],
52+
53+
environment = {
54+
NODE_ENV = "production",
55+
DENO_ENV = "production",
56+
},
57+
},
58+
},
59+
60+
local_dev = {
61+
server_command | NonEmptyString = "deno run -A jsr:@std/http/file-server .",
62+
port | Port = 8000,
63+
watch_command | NonEmptyString = "deno task watch",
64+
hot_reload = false,
65+
},
66+
67+
quality = {
68+
linting = {
69+
enabled = true,
70+
command | NonEmptyString = "deno lint",
71+
},
72+
73+
formatting = {
74+
enabled = true,
75+
command | NonEmptyString = "deno fmt",
76+
},
77+
78+
editorconfig = {
79+
enabled = true,
80+
check_command | NonEmptyString = "editorconfig-checker",
81+
},
82+
},
83+
84+
validation = {
85+
proven_validation = true,
86+
dom_safety_checks = true,
87+
url_validation = "ProvenSafeUrl",
88+
html_validation = "balanced-tags",
89+
},
90+
}

config/metadata.k9.ncl

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# SPDX-License-Identifier: AGPL-3.0-or-later
2+
# K9 Contractile: Kennel Level (Pure Data)
3+
# Project metadata for poly-ssg
4+
5+
{
6+
leash = 'Kennel,
7+
8+
project = {
9+
name = "poly-ssg",
10+
version = "1.0.0",
11+
description = "Interactive comparison of Static Site Generators with proven validation",
12+
homepage = "https://poly-ssg.org",
13+
repository = "https://github.com/hyperpolymath/poly-ssg",
14+
15+
license = "AGPL-3.0-or-later",
16+
author = {
17+
name = "Jonathan D.A. Jewell",
18+
email = "[email protected]",
19+
},
20+
21+
keywords = [
22+
"static-site-generator",
23+
"ssg-comparison",
24+
"casket-ssg",
25+
"hackenbush-ssg",
26+
"bunsenite-ssg",
27+
"rescript",
28+
"proven",
29+
],
30+
},
31+
32+
tech_stack = {
33+
languages = ["ReScript", "JavaScript", "HTML", "CSS"],
34+
runtime = "Deno",
35+
libraries = [
36+
"rescript-tea",
37+
"rescript-dom-mounter",
38+
"proven",
39+
"cadre-tea-router",
40+
],
41+
42+
build_tools = ["ReScript", "Deno"],
43+
package_manager = "Deno",
44+
},
45+
46+
deployment = {
47+
platform = "Cloudflare Pages",
48+
domain = "poly-ssg.org",
49+
build_command = "deno task build",
50+
output_directory = "/",
51+
},
52+
53+
features = {
54+
proven_validation = true,
55+
formal_verification = true,
56+
tea_architecture = true,
57+
ssg_comparison = true,
58+
interactive_demo = true,
59+
dom_mounting = "rescript-dom-mounter",
60+
},
61+
62+
status = {
63+
phase = "MVP Development",
64+
completion_percentage = 60,
65+
production_ready = false,
66+
},
67+
}

content/index.a2ml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
---
2+
title: Poly-SSG - Static Site Generator Comparison
3+
description: Interactive comparison of modern static site generators with proven validation
4+
author: Jonathan D.A. Jewell
5+
date: 2026-01-30
6+
---
7+
8+
# Poly-SSG: Static Site Generator Comparison
9+
10+
An interactive tool for comparing and selecting the right static site generator for your project.
11+
12+
## Supported Generators
13+
14+
### Casket-SSG
15+
**Modern, flexible SSG with multiple markup formats**
16+
17+
- **Markdown** - CommonMark compliant
18+
- **AsciiDoc** - Technical documentation
19+
- **A2ML** - Attested markup language
20+
- **k9-svc** - Self-validating components
21+
- **Pandoc** - Universal document converter
22+
23+
### Hackenbush-SSG
24+
**Fast, minimalist SSG built with Rust**
25+
26+
- **Markdown** - Fast parsing
27+
- **TOML** - Configuration
28+
- **Speed** - Optimized for performance
29+
- **Simplicity** - Minimal learning curve
30+
31+
### Bunsenite-SSG
32+
**Type-safe SSG with Nickel configuration**
33+
34+
- **Nickel** - Configuration language with contracts
35+
- **Type-safe** - Compile-time validation
36+
- **Functional** - Pure functional programming
37+
- **Validated** - Contract-based configuration
38+
39+
### Cobalt-SSG
40+
**Ruby-based SSG with Liquid templates**
41+
42+
- **Markdown** - Standard format
43+
- **Liquid** - Template engine
44+
- **Ruby** - Powerful ecosystem
45+
- **Jekyll-compatible** - Familiar syntax
46+
47+
## Features Comparison
48+
49+
| Feature | Casket | Hackenbush | Bunsenite | Cobalt |
50+
|---------|--------|------------|-----------|--------|
51+
| Markdown | ✓ | ✓ | ✓ | ✓ |
52+
| AsciiDoc | ✓ | ✗ | ✗ | ✗ |
53+
| A2ML | ✓ | ✗ | ✗ | ✗ |
54+
| Type Safety | ✓ | ✗ | ✓ | ✗ |
55+
| Speed | Medium | Fast | Medium | Slow |
56+
| Complexity | Medium | Low | High | Medium |
57+
58+
## How to Choose
59+
60+
**Choose Casket-SSG if you need:**
61+
- Multiple markup formats
62+
- k9-svc integration
63+
- A2ML attested content
64+
- Proven validation
65+
66+
**Choose Hackenbush-SSG if you need:**
67+
- Maximum performance
68+
- Minimal setup
69+
- Simple projects
70+
- Rust ecosystem
71+
72+
**Choose Bunsenite-SSG if you need:**
73+
- Type-safe configuration
74+
- Functional programming
75+
- Nickel contracts
76+
- Compile-time validation
77+
78+
**Choose Cobalt-SSG if you need:**
79+
- Jekyll compatibility
80+
- Ruby ecosystem
81+
- Liquid templates
82+
- Familiar workflow
83+
84+
## Try It Out
85+
86+
1. Visit the [interactive demo](/demo)
87+
2. Compare feature sets
88+
3. Test each generator
89+
4. Make an informed choice
90+
91+
## Learn More
92+
93+
- [Casket-SSG](https://github.com/hyperpolymath/casket-ssg)
94+
- [Hackenbush-SSG](https://github.com/hyperpolymath/hackenbush-ssg)
95+
- [Bunsenite-SSG](https://github.com/hyperpolymath/bunsenite)
96+
- [Cobalt-SSG](https://cobalt-org.github.io/)
97+
98+
---
99+
100+
*Poly-SSG - Choose the right tool for the job.*

deno.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22
"tasks": {
33
"build": "deno run -A npm:rescript",
44
"clean": "deno run -A npm:rescript clean",
5-
"watch": "deno run -A npm:rescript -w"
5+
"watch": "deno run -A npm:rescript -w",
6+
"build:all": "deno task k9:validate && deno task a2ml:render && deno task build",
7+
"k9:validate": "nickel typecheck config/metadata.k9.ncl && nickel typecheck config/ci.k9.ncl",
8+
"k9:export": "nickel export config/metadata.k9.ncl > metadata.json",
9+
"a2ml:render": "deno run -A --config ../a2ml/prototype/rescript/deno.json ../a2ml/prototype/rescript/src/Cli.bs.js render content/index.a2ml --out public/index.html",
10+
"a2ml:validate": "cd ../a2ml && just cli validate ../poly-ssg/content/*.a2ml",
11+
"serve": "deno run -A jsr:@std/http/file-server ."
612
},
713
"imports": {
814
"rescript": "npm:rescript@^12.1.0",

lib/rescript.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1932219
1+
2122931

public/index.html

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<ul><li>--</li></ul>
2+
<p>title: Poly-SSG - Static Site Generator Comparison description: Interactive comparison of modern static site generators with proven validation author: Jonathan D.A. Jewell date: 2026-01-30</p>
3+
<ul><li>--</li></ul>
4+
<h1>Poly-SSG: Static Site Generator Comparison</h1>
5+
<p>An interactive tool for comparing and selecting the right static site generator for your project.</p>
6+
<h2>Supported Generators</h2>
7+
<h3>Casket-SSG</h3>
8+
<p><strong>Modern, flexible SSG with multiple markup formats</strong></p>
9+
<ul><li><strong>Markdown</strong> - CommonMark compliant</li><li><strong>AsciiDoc</strong> - Technical documentation</li><li><strong>A2ML</strong> - Attested markup language</li><li><strong>k9-svc</strong> - Self-validating components</li><li><strong>Pandoc</strong> - Universal document converter</li></ul>
10+
<h3>Hackenbush-SSG</h3>
11+
<p><strong>Fast, minimalist SSG built with Rust</strong></p>
12+
<ul><li><strong>Markdown</strong> - Fast parsing</li><li><strong>TOML</strong> - Configuration</li><li><strong>Speed</strong> - Optimized for performance</li><li><strong>Simplicity</strong> - Minimal learning curve</li></ul>
13+
<h3>Bunsenite-SSG</h3>
14+
<p><strong>Type-safe SSG with Nickel configuration</strong></p>
15+
<ul><li><strong>Nickel</strong> - Configuration language with contracts</li><li><strong>Type-safe</strong> - Compile-time validation</li><li><strong>Functional</strong> - Pure functional programming</li><li><strong>Validated</strong> - Contract-based configuration</li></ul>
16+
<h3>Cobalt-SSG</h3>
17+
<p><strong>Ruby-based SSG with Liquid templates</strong></p>
18+
<ul><li><strong>Markdown</strong> - Standard format</li><li><strong>Liquid</strong> - Template engine</li><li><strong>Ruby</strong> - Powerful ecosystem</li><li><strong>Jekyll-compatible</strong> - Familiar syntax</li></ul>
19+
<h2>Features Comparison</h2>
20+
<p>| Feature | Casket | Hackenbush | Bunsenite | Cobalt | |---------|--------|------------|-----------|--------| | Markdown | ✓ | ✓ | ✓ | ✓ | | AsciiDoc | ✓ | ✗ | ✗ | ✗ | | A2ML | ✓ | ✗ | ✗ | ✗ | | Type Safety | ✓ | ✗ | ✓ | ✗ | | Speed | Medium | Fast | Medium | Slow | | Complexity | Medium | Low | High | Medium |</p>
21+
<h2>How to Choose</h2>
22+
<p><strong>Choose Casket-SSG if you need:</strong></p>
23+
<ul><li>Multiple markup formats</li><li>k9-svc integration</li><li>A2ML attested content</li><li>Proven validation</li></ul>
24+
<p><strong>Choose Hackenbush-SSG if you need:</strong></p>
25+
<ul><li>Maximum performance</li><li>Minimal setup</li><li>Simple projects</li><li>Rust ecosystem</li></ul>
26+
<p><strong>Choose Bunsenite-SSG if you need:</strong></p>
27+
<ul><li>Type-safe configuration</li><li>Functional programming</li><li>Nickel contracts</li><li>Compile-time validation</li></ul>
28+
<p><strong>Choose Cobalt-SSG if you need:</strong></p>
29+
<ul><li>Jekyll compatibility</li><li>Ruby ecosystem</li><li>Liquid templates</li><li>Familiar workflow</li></ul>
30+
<h2>Try It Out</h2>
31+
<p>1. Visit the <a href="/demo">interactive demo</a> 2. Compare feature sets 3. Test each generator 4. Make an informed choice</p>
32+
<h2>Learn More</h2>
33+
<ul><li><a href="https://github.com/hyperpolymath/casket-ssg">Casket-SSG</a></li><li><a href="https://github.com/hyperpolymath/hackenbush-ssg">Hackenbush-SSG</a></li><li><a href="https://github.com/hyperpolymath/bunsenite">Bunsenite-SSG</a></li><li><a href="https://cobalt-org.github.io/">Cobalt-SSG</a></li></ul>
34+
<ul><li>--</li></ul>
35+
<p><em>Poly-SSG - Choose the right tool for the job.</em></p>

0 commit comments

Comments
 (0)