Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 10 additions & 24 deletions .github/workflows/dogfood-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -261,31 +261,17 @@ jobs:

echo "has_manifest=true" >> "$GITHUB_OUTPUT"

# Validate TOML structure using Python 3.11+ tomllib
python3 -c "
import tomllib, sys
with open('eclexiaiser.toml', 'rb') as f:
data = tomllib.load(f)
project = data.get('project', {})
if not project.get('name', '').strip():
print('ERROR: project.name is required', file=sys.stderr)
sys.exit(1)
functions = data.get('functions', [])
if not functions:
print('ERROR: at least one [[functions]] entry is required', file=sys.stderr)
sys.exit(1)
for fn in functions:
if not fn.get('name', '').strip():
print('ERROR: function name cannot be empty', file=sys.stderr)
sys.exit(1)
if not fn.get('source', '').strip():
print(f'ERROR: function {fn[\"name\"]} has no source path', file=sys.stderr)
sys.exit(1)
print(f'Valid: {project[\"name\"]} ({len(functions)} function(s))')
" || {
echo "::error file=eclexiaiser.toml::Invalid eclexiaiser.toml — see step output for details"
# Validate eclexiaiser.toml structure (bash + grep; NO Python per estate policy).
# Structural presence checks only — deep schema validation is eclexiaiser's own job.
err=0
grep -qE '^[[:space:]]*\[project\]' eclexiaiser.toml || { echo "::error file=eclexiaiser.toml::[project] section is required"; err=1; }
grep -qE '^[[:space:]]*name[[:space:]]*=[[:space:]]*"[^"]+"' eclexiaiser.toml || { echo "::error file=eclexiaiser.toml::a non-empty name is required"; err=1; }
grep -qE '^[[:space:]]*\[\[functions\]\]' eclexiaiser.toml || { echo "::error file=eclexiaiser.toml::at least one [[functions]] entry is required"; err=1; }
if [ "$err" -ne 0 ]; then
exit 1
}
fi
fns=$(grep -cE '^[[:space:]]*\[\[functions\]\]' eclexiaiser.toml)
echo "Valid: eclexiaiser.toml structure present (${fns} function block(s))"

- name: Write summary
run: |
Expand Down
14 changes: 0 additions & 14 deletions .github/workflows/rsr-antipattern.yml

This file was deleted.

86 changes: 86 additions & 0 deletions docs/tech-debt-2026-05-26.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// SPDX-License-Identifier: CC-BY-SA-4.0
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
= Tech-Debt Audit — scaffoldia — 2026-05-26

// Historical snapshot: this audit predates the scaffoldia identity split
// (this repo was still the rsr-template-repo scaffold when scanned on
// 2026-05-26). Retained verbatim as a dated record; findings below describe
// the tree as it stood then.

*Source:* estate-wide automated scan 2026-05-26. +
*Companion:* https://github.com/hyperpolymath/standards/tree/main/docs/audits[`hyperpolymath/standards` 2026-05-26-estate-*-debt audits]. +
*Combined severity:* `LOW`.

This file records the _raw findings_ — it does not by itself fix the debt.
Each section ends with a 'Recommended next move' line; closing the debt is
follow-up work.

== 1. Proof debt

Scanner counted the following markers in proof-bearing files of this repo:

----
files= 13 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 6 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0
----

*Total markers:* 6. *Severity:* `>06`.

*Marker types* (any non-zero counts above):

* Coq `Axiom`/`Admitted` — unconditional proof escapes.
* Lean `sorry`/`axiom` — Lean's equivalent.
* Agda `postulate` — accepted axiomatically.
* Idris2 `believe_me`/`assert_total` — runtime-safe coercion / totality assumption.
* Idris2 top-level `partial` — totality-check waived.
* F* `assume val`/`admit_p` — F* admit.
* `TODO PROOF` / `OWED:` — self-documented debt markers.
* `unsafePerformIO`/`unsafeCoerce` — soundness-relevant escape hatches in Haskell/Rust source.

*Recommended next move:* triage each finding into one of: (a) discharge by
proof, (b) cover with property-tests + a documented refutation budget, or
(c) annotate as a known/necessary axiom (e.g. `funExt`) in
`docs/proof-debt.adoc`.

== 2. Licence debt

[cols="1,1"]
|===
| Field | Value

| LICENSE file | `LICENSE`
| SPDX header | `MPL-2.0`
| Manifest licence | `NONE`
| Body classifier | `Palimp-MPL-2.0`
| Severity | `ok`
|===

*Recommended next move:* none for licence.

== 3. Documentation debt

[cols="1,1"]
|===
| Field | Value

| README lines | 186
| `docs/` files | 70
| `docs/` LoC | 4218
| CHANGELOG.md | Y
| CONTRIBUTING.md | N
| CODE_OF_CONDUCT.md | N
| SECURITY.md | N
| Severity | `OK`
|===

*Recommended next move:* none for docs.

== Cross-references

* Estate proof-debt audit: `hyperpolymath/standards/docs/audits/2026-05-26-estate-proof-debt.md`
* Estate licence-debt audit: `hyperpolymath/standards/docs/audits/2026-05-26-estate-licence-debt.md`
* Estate documentation-debt audit: `hyperpolymath/standards/docs/audits/2026-05-26-estate-documentation-debt.md`

'''

🤖 Generated by Claude Code estate-wide tech-debt scan (2026-05-26). This file
is informational — closing the debt is follow-up work owned by the maintainer.
70 changes: 0 additions & 70 deletions docs/tech-debt-2026-05-26.md

This file was deleted.

Loading