Skip to content

Commit 7d7160d

Browse files
fix(security): complete security policy and update SCM files (#1)
- Remove template placeholders from SECURITY.md - Update repository URLs to hyperpolymath/labnote-ssg - Simplify PGP section (not currently using encrypted email) - Update META.scm with correct project name (labnote-ssg) - Update ECOSYSTEM.scm with accurate project description - Update STATE.scm to reflect v0.2 completion (50%) - Add comprehensive README.adoc with project documentation Security improvements: - All adapter security reviewed (safe Deno.Command usage) - No shell injection vulnerabilities found - CodeQL and Dependabot properly configured Co-authored-by: Claude <noreply@anthropic.com>
1 parent 865605c commit 7d7160d

File tree

5 files changed

+157
-63
lines changed

5 files changed

+157
-63
lines changed

ECOSYSTEM.scm

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
;; SPDX-License-Identifier: AGPL-3.0-or-later
22
;; SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell
3-
;; ECOSYSTEM.scm — template-repo
3+
;; ECOSYSTEM.scm — labnote-ssg
44

55
(ecosystem
66
(version "1.0.0")
7-
(name "template-repo")
8-
(type "project")
9-
(purpose "Project in the hyperpolymath ecosystem")
7+
(name "labnote-ssg")
8+
(type "satellite")
9+
(purpose "MCP adapter hub for 28 static site generators")
1010

1111
(position-in-ecosystem
1212
"Part of hyperpolymath ecosystem. Follows RSR guidelines.")
@@ -24,5 +24,5 @@
2424
(url "https://github.com/hyperpolymath/rhodium-standard-repositories")
2525
(relationship "standard")))
2626

27-
(what-this-is "Project in the hyperpolymath ecosystem")
28-
(what-this-is-not "- NOT exempt from RSR compliance"))
27+
(what-this-is "Satellite SSG adapter hub providing MCP adapters for 28 static site generators")
28+
(what-this-is-not "- NOT the poly-ssg-mcp hub itself\n- NOT exempt from RSR compliance"))

META.scm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
;; SPDX-License-Identifier: AGPL-3.0-or-later
22
;; SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell
3-
;;; META.scm — template-repo
3+
;;; META.scm — labnote-ssg
44

5-
(define-module (template-repo meta)
5+
(define-module (labnote-ssg meta)
66
#:export (architecture-decisions development-practices design-rationale))
77

88
(define architecture-decisions

README.adoc

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,114 @@
1+
// SPDX-License-Identifier: MIT OR AGPL-3.0-or-later
2+
// SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell
3+
= labnote-ssg
4+
:toc: macro
5+
:toclevels: 2
6+
:source-highlighter: rouge
17

8+
image:https://img.shields.io/badge/RSR-Gold-gold[RSR Gold]
9+
image:https://img.shields.io/badge/license-MIT%20OR%20AGPL--3.0--or--later-blue[License]
10+
image:https://img.shields.io/badge/MCP-compatible-green[MCP Compatible]
11+
12+
MCP adapter hub for 28 static site generators — part of the https://github.com/hyperpolymath[hyperpolymath] ecosystem.
13+
14+
toc::[]
15+
16+
== Overview
17+
18+
labnote-ssg provides Model Context Protocol (MCP) adapters for 28 different static site generators (SSGs). As a satellite project in the hyperpolymath ecosystem, it integrates with https://github.com/hyperpolymath/poly-ssg-mcp[poly-ssg-mcp] hub to provide a unified interface for working with diverse SSG tooling.
19+
20+
=== Features
21+
22+
* **28 SSG Adapters** — Support for major static site generators across multiple languages
23+
* **MCP Protocol** — Standard interface for AI-assisted development workflows
24+
* **Security-First** — Safe command execution with no shell injection vulnerabilities
25+
* **RSR Compliant** — Follows Rhodium Standard Repository guidelines
26+
27+
== Supported SSGs
28+
29+
[cols="1,1,2"]
30+
|===
31+
|Language |SSG |Description
32+
33+
|Rust |Zola |Fast SSG with Sass compilation and syntax highlighting
34+
|Rust |mdBook |Documentation/book generator for Rust projects
35+
|Rust |Cobalt |Simple, extensible static site generator
36+
|Elixir |Serum |Simple static website generator
37+
|Elixir |NimblePublisher |Markdown-based publishing engine
38+
|Elixir |Tableau |Static site generator using LiveView
39+
|Haskell |Hakyll |Flexible static site library
40+
|Haskell |Ema |Hot-reloading static site generator
41+
|Clojure |Cryogen |Static site generator written in Clojure
42+
|Clojure |Perun |Composable static site generator
43+
|Clojure |Babashka |Fast native Clojure scripting
44+
|Common Lisp |Coleslaw |Flexible static blog generator
45+
|Racket |Frog |Static blog generator
46+
|Racket |Pollen |Book-publishing system
47+
|Julia |Franklin |Flexible static site generator
48+
|Julia |Publish |Documentation publishing system
49+
|Julia |Documenter |Documentation generator for packages
50+
|Scala |Laika |Text markup transformer and site generator
51+
|Scala |Orchid |Documentation and static site engine
52+
|Scala |ScalaTex |Typesetting with Scala
53+
|F# |Fornax |Scriptable static site generator
54+
|OCaml |YOCaml |Static site generator in OCaml
55+
|Nim |Nimrod |Static site builder
56+
|D |Reggae |Build system for D language
57+
|D |Marmot |Static site generator
58+
|Ada |StaticWebPages |Web page generator
59+
|Erlang |Zotonic |Web framework and CMS
60+
|Erlang |Wub |Web utilities
61+
|===
62+
63+
== Architecture
64+
65+
labnote-ssg serves as a satellite implementation in the poly-ssg-mcp ecosystem:
66+
67+
....
68+
┌─────────────────────┐
69+
│ poly-ssg-mcp │
70+
│ (Central Hub) │
71+
└──────────┬──────────┘
72+
│ MCP Protocol
73+
┌──────────────────┼──────────────────┐
74+
│ │ │
75+
┌───────┴───────┐ ┌───────┴───────┐ ┌───────┴───────┐
76+
│ labnote-ssg │ │ Other SSG │ │ Other SSG │
77+
│ (Satellite) │ │ Satellites │ │ Satellites │
78+
└───────────────┘ └───────────────┘ └───────────────┘
79+
....
80+
81+
== Security
82+
83+
* All adapters use safe command execution (`Deno.Command` with array arguments)
84+
* No shell string construction or `eval` usage
85+
* CodeQL SAST scanning enabled
86+
* Dependabot security updates configured
87+
* Full security policy available in link:SECURITY.md[SECURITY.md]
88+
89+
== Development
90+
91+
=== Prerequisites
92+
93+
* https://deno.land[Deno] runtime (for adapter execution)
94+
* Individual SSG binaries as needed
95+
96+
=== Running Adapters
97+
98+
Adapters are designed to be loaded by the poly-ssg-mcp hub. Each adapter exports:
99+
100+
* `name` — SSG name
101+
* `language` — Implementation language
102+
* `description` — Brief description
103+
* `connect()` — Initialize connection
104+
* `disconnect()` — Clean up
105+
* `isConnected()` — Connection status
106+
* `tools` — Array of MCP-compatible tool definitions
107+
108+
== Contributing
109+
110+
See link:CONTRIBUTING.md[CONTRIBUTING.md] for development guidelines.
111+
112+
== License
113+
114+
Dual licensed under MIT OR AGPL-3.0-or-later. See link:LICENSE.txt[LICENSE.txt] for details.

SECURITY.md

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,5 @@
11
# Security Policy
22

3-
<!--
4-
============================================================================
5-
TEMPLATE INSTRUCTIONS (delete this block before publishing)
6-
============================================================================
7-
Replace all {{PLACEHOLDER}} values with your information:
8-
{{PROJECT_NAME}} - Your project name
9-
{{OWNER}} - GitHub username or org (e.g., hyperpolymath)
10-
{{REPO}} - Repository name
11-
{{SECURITY_EMAIL}} - Security contact email
12-
{{PGP_FINGERPRINT}} - Your PGP key fingerprint (40 chars, no spaces)
13-
{{PGP_KEY_URL}} - URL to your public PGP key
14-
{{WEBSITE}} - Your website/domain
15-
{{CURRENT_YEAR}} - Current year for copyright
16-
17-
Optional: Remove sections that don't apply (e.g., PGP if you don't use it)
18-
============================================================================
19-
-->
20-
213
We take security seriously. We appreciate your efforts to responsibly disclose vulnerabilities and will make every effort to acknowledge your contributions.
224

235
## Table of Contents
@@ -40,7 +22,7 @@ We take security seriously. We appreciate your efforts to responsibly disclose v
4022

4123
The preferred method for reporting security vulnerabilities is through GitHub's Security Advisory feature:
4224

43-
1. Navigate to [Report a Vulnerability](https://github.com/{{OWNER}}/{{REPO}}/security/advisories/new)
25+
1. Navigate to [Report a Vulnerability](https://github.com/hyperpolymath/labnote-ssg/security/advisories/new)
4426
2. Click **"Report a vulnerability"**
4527
3. Complete the form with as much detail as possible
4628
4. Submit — we'll receive a private notification
@@ -52,26 +34,9 @@ This method ensures:
5234
- Coordinated disclosure tooling
5335
- Automatic credit when the advisory is published
5436

55-
### Alternative: Encrypted Email
56-
57-
If you cannot use GitHub Security Advisories, you may email us directly:
58-
59-
| | |
60-
|---|---|
61-
| **Email** | {{SECURITY_EMAIL}} |
62-
| **PGP Key** | [Download Public Key]({{PGP_KEY_URL}}) |
63-
| **Fingerprint** | `{{PGP_FINGERPRINT}}` |
37+
### Alternative: GitHub Issues (Private)
6438

65-
```bash
66-
# Import our PGP key
67-
curl -sSL {{PGP_KEY_URL}} | gpg --import
68-
69-
# Verify fingerprint
70-
gpg --fingerprint {{SECURITY_EMAIL}}
71-
72-
# Encrypt your report
73-
gpg --armor --encrypt --recipient {{SECURITY_EMAIL}} report.txt
74-
```
39+
If you cannot use GitHub Security Advisories, you may open a private security issue or contact the maintainers through the repository.
7540

7641
> **⚠️ Important:** Do not report security vulnerabilities through public GitHub issues, pull requests, discussions, or social media.
7742
@@ -203,7 +168,7 @@ If we cannot reach agreement on disclosure timing, we default to 90 days from yo
203168

204169
The following are within scope for security research:
205170

206-
- This repository (`{{OWNER}}/{{REPO}}`) and all its code
171+
- This repository (`hyperpolymath/labnote-ssg`) and all its code
207172
- Official releases and packages published from this repository
208173
- Documentation that could lead to security issues
209174
- Build and deployment configurations in this repository
@@ -322,7 +287,7 @@ Recognition includes:
322287
To stay informed about security updates:
323288

324289
- **Watch this repository**: Click "Watch" → "Custom" → Select "Security alerts"
325-
- **GitHub Security Advisories**: Published at [Security Advisories](https://github.com/{{OWNER}}/{{REPO}}/security/advisories)
290+
- **GitHub Security Advisories**: Published at [Security Advisories](https://github.com/hyperpolymath/labnote-ssg/security/advisories)
326291
- **Release notes**: Security fixes noted in [CHANGELOG](CHANGELOG.md)
327292

328293
### Update Policy
@@ -348,7 +313,7 @@ To stay informed about security updates:
348313

349314
## Security Best Practices
350315

351-
When using {{PROJECT_NAME}}, we recommend:
316+
When using labnote-ssg, we recommend:
352317

353318
### General
354319

@@ -370,8 +335,7 @@ When using {{PROJECT_NAME}}, we recommend:
370335

371336
## Additional Resources
372337

373-
- [Our PGP Public Key]({{PGP_KEY_URL}})
374-
- [Security Advisories](https://github.com/{{OWNER}}/{{REPO}}/security/advisories)
338+
- [Security Advisories](https://github.com/hyperpolymath/labnote-ssg/security/advisories)
375339
- [Changelog](CHANGELOG.md)
376340
- [Contributing Guidelines](CONTRIBUTING.md)
377341
- [CVE Database](https://cve.mitre.org/)
@@ -383,8 +347,8 @@ When using {{PROJECT_NAME}}, we recommend:
383347

384348
| Purpose | Contact |
385349
|---------|---------|
386-
| **Security issues** | [Report via GitHub](https://github.com/{{OWNER}}/{{REPO}}/security/advisories/new) or {{SECURITY_EMAIL}} |
387-
| **General questions** | [GitHub Discussions](https://github.com/{{OWNER}}/{{REPO}}/discussions) |
350+
| **Security issues** | [Report via GitHub](https://github.com/hyperpolymath/labnote-ssg/security/advisories/new) |
351+
| **General questions** | [GitHub Discussions](https://github.com/hyperpolymath/labnote-ssg/discussions) |
388352
| **Other enquiries** | See [README](README.md) for contact information |
389353

390354
---
@@ -399,8 +363,8 @@ This security policy may be updated from time to time. Significant changes will
399363

400364
---
401365

402-
*Thank you for helping keep {{PROJECT_NAME}} and its users safe.* 🛡️
366+
*Thank you for helping keep labnote-ssg and its users safe.*
403367

404368
---
405369

406-
<sub>Last updated: {{CURRENT_YEAR}} · Policy version: 1.0.0</sub>
370+
<sub>Last updated: 2025 · Policy version: 1.0.0</sub>

STATE.scm

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,39 @@
1-
;;; STATE.scm — template-repo
1+
;;; STATE.scm — labnote-ssg
22
;; SPDX-License-Identifier: AGPL-3.0-or-later
33
;; SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell
44

55
(define metadata
6-
'((version . "0.1.0") (updated . "2025-12-15") (project . "template-repo")))
6+
'((version . "0.2.0") (updated . "2025-12-17") (project . "labnote-ssg")))
77

88
(define current-position
9-
'((phase . "v0.1 - Initial Setup")
10-
(overall-completion . 25)
11-
(components ((rsr-compliance ((status . "complete") (completion . 100)))))))
9+
'((phase . "v0.2 - Security Hardening Complete")
10+
(overall-completion . 50)
11+
(components
12+
((rsr-compliance ((status . "complete") (completion . 100)))
13+
(security-policy ((status . "complete") (completion . 100)))
14+
(adapter-implementation ((status . "complete") (completion . 100)))
15+
(documentation ((status . "in-progress") (completion . 30)))
16+
(testing ((status . "pending") (completion . 0)))
17+
(ci-cd-verification ((status . "pending") (completion . 0)))))))
1218

1319
(define blockers-and-issues '((critical ()) (high-priority ())))
1420

1521
(define critical-next-actions
16-
'((immediate (("Verify CI/CD" . high))) (this-week (("Expand tests" . medium)))))
22+
'((immediate
23+
(("Verify CI/CD pipelines work" . high)
24+
("Add comprehensive tests" . high)))
25+
(this-week
26+
(("Create CHANGELOG.md" . medium)
27+
("Expand README documentation" . medium)))))
1728

1829
(define session-history
19-
'((snapshots ((date . "2025-12-15") (session . "initial") (notes . "SCM files added")))))
30+
'((snapshots
31+
((date . "2025-12-15") (session . "initial") (notes . "SCM files added"))
32+
((date . "2025-12-16") (session . "adapters") (notes . "28 SSG adapters integrated"))
33+
((date . "2025-12-17") (session . "security") (notes . "Security policy completed, SCM files updated")))))
2034

2135
(define state-summary
22-
'((project . "template-repo") (completion . 25) (blockers . 0) (updated . "2025-12-15")))
36+
'((project . "labnote-ssg")
37+
(completion . 50)
38+
(blockers . 0)
39+
(updated . "2025-12-17")))

0 commit comments

Comments
 (0)