Skip to content

Commit 1549cfa

Browse files
chore: security-template fills, instant-sync gate, foreign-artifact cleanup, compat polish (wave-1 8/8) (#33)
Part 8/8 of the production-readiness wave-1 chain: 1 `fix/neural-boundary-guardrail` (P0) → 2 `fix/stats-degenerate-inputs` (P1) → 3 `test/executor-router-coverage` (P1) → 4 `fix/documented-install-path` (P0-docs) → 5 `fix/supply-chain-pinning` (P1) → 6 `fix/zig-ffi-compiles` (P1) → 7 `fix/agda-proofs-ci` (P1) → **8 `chore/hygiene-security-templates` (P2, this PR)**. All eight PRs are independent and target `main`; the numbering communicates review priority, not stacking. ## What changed and why **Security-template fills** - `SECURITY.md` — deleted the leftover "delete this block before publishing" template-instructions block and removed the TBD PGP key/fingerprint rows plus the `gpg --import` snippet (no key is published; none invented). Real contact routes (GitHub advisories, email) kept. - `.well-known/security.txt` — removed the `Encryption: TBD` line and fixed the double-`https://` Hiring URL. All other RFC 9116 fields (`Expires` etc.) unchanged. - `CODE_OF_CONDUCT.md`, `docs/AI_INSTALLATION_GUIDE.adoc` — removed leftover "delete before publishing / after completing" template banners only; no content rewrite. **Instant-sync presence gate + tracking issue** - `.github/workflows/instant-sync.yml` currently fails on 100% of `main` pushes ("Bad credentials" dispatching to `hyperpolymath/.git-private-farm`). Added a **first** step that checks `FARM_DISPATCH_TOKEN` presence and sets a step output; the dispatch/confirm steps are now conditional on it — step-level `if` only, never job-level `secrets`/`hashFiles()` conditionals (those cause silent `startup_failure`). - Tracking issue for the invalid token: #32 (labels `bug`, `github_actions`), citing the failing runs. Note: the gate only makes *absent-secret* runs green; while the secret exists but is invalid, runs stay red until an admin rotates the token (tracked in #32). **Foreign-artifact cleanup & dedup** - Deleted `generated/wokelangiser/` (7.6 MB of foreign artifacts) and added `generated/` to `.gitignore`. - Deleted root `CODEOWNERS` after verifying it is a strict subset of `.github/CODEOWNERS` with identical owners (GitHub honours the `.github/` copy). - Removed the dead `tests/` directory (`.gitkeep`-only; the Julia suite lives in `test/` and nothing references `tests/`). **Compat polish** - `.conflow.yaml` — converted invalid `//` comments to `#` and pointed it at `statistikles` instead of the generic `my-app` template (accompanying rename in `configs/config.ncl`; the cue schema tolerates the name change). Minimal fix, no restructure. - `Project.toml` — added `[compat]` entries `Dates`/`LinearAlgebra`/`Printf`/`Random`/`Statistics`/`UUIDs = "1"` for the stdlib deps to fully quiet RegistryCI AutoMerge; entries match the `[deps]` UUIDs. ## Local verification - `grep` over the four touched template files (`SECURITY.md`, `.well-known/security.txt`, `CODE_OF_CONDUCT.md`, `docs/AI_INSTALLATION_GUIDE.adoc`) confirms zero remaining template-banner / `TBD` / double-`https://` remnants (independently re-confirmed by review). - `instant-sync.yml` read back after edit: presence check is the first step; all conditionals are step-level `if`s keyed on its output. - `git status` showed the `generated/wokelangiser/` deletion staged; root `CODEOWNERS` diffed against `.github/CODEOWNERS` before deletion (strict subset, identical owners). - No local toolchain runs were required for this package (docs/CI/metadata only). ## Intentionally not done / disclosures - **`.gitlab-ci.yml` and `deny.toml` untouched by design** (out of scope per the wave plan: flagged as scaffolding but carrying load-bearing claims). Recommended follow-up decision: `.gitlab-ci.yml` also contains a `//` comment artifact like the one fixed in `.conflow.yaml`, and `deny.toml` needs a deliberate review — suggest a small follow-up PR for both. - `generated/abi/.gitkeep` remains tracked: the spec only ordered the `wokelangiser` deletion, and gitignoring `generated/` does not untrack already-tracked files. - Two "delete this section" comments remain in `docs/AI_INSTALLATION_GUIDE.adoc` (lines 194/215); they sit inside unfilled `[TODO-AI-INSTALL]` body sections that were explicitly excluded from content rewrite. - Instant-sync runs stay red until `FARM_DISPATCH_TOKEN` is rotated — admin action, tracked in #32. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent f631afb commit 1549cfa

15 files changed

Lines changed: 30 additions & 50296 deletions

File tree

.conflow.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// SPDX-License-Identifier: MPL-2.0
2-
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
33
# conflow pipeline - Full generate → validate → export
44
version: "1"
55
name: "statistikles"

.github/workflows/instant-sync.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,23 @@ jobs:
1717
runs-on: ubuntu-latest
1818
timeout-minutes: 15
1919
steps:
20+
# Gate on secret presence so runs without the dispatch token skip
21+
# cleanly instead of failing (step-level `if` only; job-level
22+
# secrets conditionals cause silent startup failures).
23+
- name: Check dispatch token presence
24+
id: token
25+
env:
26+
FARM_DISPATCH_TOKEN: ${{ secrets.FARM_DISPATCH_TOKEN }}
27+
run: |
28+
if [ -n "$FARM_DISPATCH_TOKEN" ]; then
29+
echo "present=true" >> "$GITHUB_OUTPUT"
30+
else
31+
echo "present=false" >> "$GITHUB_OUTPUT"
32+
echo "::warning::FARM_DISPATCH_TOKEN not set; skipping forge propagation"
33+
fi
34+
2035
- name: Trigger Propagation
36+
if: steps.token.outputs.present == 'true'
2137
uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v3
2238
with:
2339
token: ${{ secrets.FARM_DISPATCH_TOKEN }}
@@ -32,4 +48,5 @@ jobs:
3248
}
3349
3450
- name: Confirm
51+
if: steps.token.outputs.present == 'true'
3552
run: echo "::notice::Propagation triggered for ${{ github.event.repository.name }}"

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ ai-cli-crash-capture/
9494
# Sync artifacts
9595
sync_report*.txt
9696

97-
# wokelangiser generated i18n locale files (too large for GitHub)
98-
generated/wokelangiser/i18n/
97+
# Generated artifacts (wokelangiser, conflow exports) — regenerate, don't commit
98+
generated/
9999
target/
100100
node_modules/
101101
_build/

.well-known/security.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44

55
Contact: mailto:j.d.a.jewell@open.ac.uk
66
Expires: 2026-12-31T23:59:59.000Z
7-
Encryption: TBD
87
Preferred-Languages: en
98
Canonical: https://github.com/hyperpolymath/statistikles/.well-known/security.txt
109
Policy: https://github.com/hyperpolymath/statistikles/blob/main/SECURITY.md
11-
Hiring: https://https://github.com/hyperpolymath/statistikles/careers
10+
Hiring: https://github.com/hyperpolymath/statistikles/careers

CODEOWNERS

Lines changed: 0 additions & 8 deletions
This file was deleted.

CODE_OF_CONDUCT.md

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,6 @@ Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
44
-->
55
# Code of Conduct
66

7-
<!--
8-
============================================================================
9-
TEMPLATE INSTRUCTIONS (delete this block before publishing)
10-
============================================================================
11-
Replace all {{PLACEHOLDER}} values:
12-
Statistikles - Your project name
13-
hyperpolymath - GitHub/GitLab username or org
14-
statistikles - Repository name
15-
j.d.a.jewell@open.ac.uk - Email for conduct reports
16-
Statistikles maintainers - Name of conduct team/committee
17-
48 hours - Initial response SLA (e.g., 48 hours)
18-
2026 - Current year
19-
20-
Review and customise:
21-
- Adjust enforcement ladder for your community size
22-
- Add/remove examples based on your context
23-
- Ensure contact methods work for your team
24-
============================================================================
25-
-->
26-
277
## Our Pledge
288

299
We as members, contributors, and leaders pledge to make participation in Statistikles a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, colour, religion, or sexual identity and orientation.

Project.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,16 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
2020
[compat]
2121
CSV = "0.10.16"
2222
DataFrames = "1.8.1"
23+
Dates = "1"
2324
Distributions = "0.25.123"
2425
HTTP = "1.10.19"
2526
JSON3 = "1.14.3"
27+
LinearAlgebra = "1"
28+
Printf = "1"
29+
Random = "1"
30+
Statistics = "1"
2631
StatsBase = "0.34.10"
32+
UUIDs = "1"
2733
julia = "1.10"
2834

2935
[extras]

SECURITY.md

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,6 @@ Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
44
-->
55
# Security Policy
66

7-
<!--
8-
============================================================================
9-
TEMPLATE INSTRUCTIONS (delete this block before publishing)
10-
============================================================================
11-
Replace all {{PLACEHOLDER}} values with your information:
12-
Statistikles - Your project name
13-
hyperpolymath - GitHub username or org (e.g., hyperpolymath)
14-
statistikles - Repository name
15-
j.d.a.jewell@open.ac.uk - Security contact email
16-
TBD - Your PGP key fingerprint (40 chars, no spaces)
17-
TBD - URL to your public PGP key
18-
https://github.com/hyperpolymath/statistikles - Your website/domain
19-
2026 - Current year for copyright
20-
21-
Optional: Remove sections that don't apply (e.g., PGP if you don't use it)
22-
============================================================================
23-
-->
24-
257
We take security seriously. We appreciate your efforts to responsibly disclose vulnerabilities and will make every effort to acknowledge your contributions.
268

279
## Table of Contents
@@ -56,26 +38,13 @@ This method ensures:
5638
- Coordinated disclosure tooling
5739
- Automatic credit when the advisory is published
5840

59-
### Alternative: Encrypted Email
41+
### Alternative: Email
6042

6143
If you cannot use GitHub Security Advisories, you may email us directly:
6244

6345
| | |
6446
|---|---|
6547
| **Email** | j.d.a.jewell@open.ac.uk |
66-
| **PGP Key** | [Download Public Key](TBD) |
67-
| **Fingerprint** | `TBD` |
68-
69-
```bash
70-
# Import our PGP key
71-
curl -sSL TBD | gpg --import
72-
73-
# Verify fingerprint
74-
gpg --fingerprint j.d.a.jewell@open.ac.uk
75-
76-
# Encrypt your report
77-
gpg --armor --encrypt --recipient j.d.a.jewell@open.ac.uk report.txt
78-
```
7948

8049
> **⚠️ Important:** Do not report security vulnerabilities through public GitHub issues, pull requests, discussions, or social media.
8150
@@ -374,7 +343,6 @@ When using Statistikles, we recommend:
374343

375344
## Additional Resources
376345

377-
- [Our PGP Public Key](TBD)
378346
- [Security Advisories](https://github.com/hyperpolymath/statistikles/security/advisories)
379347
- [Changelog](CHANGELOG.md)
380348
- [Contributing Guidelines](CONTRIBUTING.md)

configs/config.ncl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Configuration generation
22
{
3-
name = "my-app",
3+
name = "statistikles",
44
replicas =
55
let env = "dev" in
66
if env == "prod" then 5

docs/AI_INSTALLATION_GUIDE.adoc

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,6 @@
55
:toc:
66
:toc-placement: preamble
77

8-
// ============================================================================
9-
// TEMPLATE INSTRUCTIONS (delete this block after completing)
10-
//
11-
// This is the AI-native installation guide template. It contains everything
12-
// an AI assistant needs to install your project for a user who says one sentence.
13-
//
14-
// BEFORE RELEASE, you or your AI must fill in every section marked [TODO].
15-
// finishbot checks that no [TODO-AI-INSTALL] markers remain.
16-
//
17-
// The pattern:
18-
// 1. User says "set up Statistikles from https://github.com/hyperpolymath/statistikles"
19-
// 2. AI fetches this repo, reads THIS file
20-
// 3. AI follows the recipe in "For AI Assistants" section
21-
// 4. User answers 2-3 questions, confirms privacy notice
22-
// 5. Done -- no manual steps, no forms, no docs to read
23-
//
24-
// Fill in every [TODO-AI-INSTALL] section. Be specific -- the AI executing
25-
// this will take your instructions literally. Include exact commands, exact
26-
// URLs for credential creation, exact config file contents.
27-
//
28-
// Reference implementations:
29-
// - neurophone/docs/AI_INSTALLATION_GUIDE.adoc (Android/Rust/Termux)
30-
// - feedback-o-tron/docs/AI_INSTALLATION_GUIDE.adoc (Elixir CLI/MCP)
31-
// ============================================================================
32-
338
[NOTE]
349
====
3510
**If you are an AI assistant reading this:** A user has asked you to install Statistikles. Skip to <<ai-implementation,For AI Assistants: Implementation Guide>> for the complete step-by-step recipe. You have everything you need in this document -- no other docs required. Follow the steps in order.

0 commit comments

Comments
 (0)