Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9b2c703
fix(learning): qualify graph evidence and detect masked scanner failures
hyperpolymath Nov 4, 2026
82396d8
fix: bind learning cursors and recognize actual Agda postulates
hyperpolymath Nov 4, 2026
a3bbebf
fix(ci): apply verified native lock for the repaired authority
hyperpolymath Nov 4, 2026
674bfff
fix(learning): retain a truncation reset across read failures
hyperpolymath Nov 4, 2026
9105eaa
fix(merge): bind observations and contain unverified execution
hyperpolymath Nov 4, 2026
14fdb94
fix(rules): scope masked SARIF evidence to its producing job
hyperpolymath Nov 4, 2026
373c8ab
fix(neural): rebuild trust from current qualified support
hyperpolymath Nov 4, 2026
19bb0b2
fix(learning): resolve outcomes and confidence in the same runtime store
hyperpolymath Nov 4, 2026
65a3d32
fix(learning): admit canonical standards subjects and read runtime fl…
hyperpolymath Nov 4, 2026
7a2719f
test: isolate anomaly detector state and trace learning regressions
hyperpolymath Nov 4, 2026
065eedc
fix: correlate masked reports with literal SARIF upload paths
hyperpolymath Nov 4, 2026
e166d5f
fix: bind learning readers and merge authority to explicit runtime ev…
hyperpolymath Nov 4, 2026
a0f61ba
fix: keep shell descriptor duplication inside the masked scan command
hyperpolymath Nov 4, 2026
176f5cc
fix: keep Baton preflight consistent with its unavailable backend
hyperpolymath Nov 4, 2026
7809f71
fix: follow bare YAML steps and masked direct SARIF reports
hyperpolymath Nov 4, 2026
6db86f5
fix(neural): bind models and persistence to their source lifecycle
hyperpolymath Nov 4, 2026
a7779ea
fix(neural): retain dispatch caps and a single diagnostics recovery pass
hyperpolymath Nov 4, 2026
c193ed6
test(neural): trace source lifecycle controls in the focused gate
hyperpolymath Nov 4, 2026
9eb5b2d
fix(outcomes): bind confidence and annealing writes to one captured s…
hyperpolymath Nov 4, 2026
3e8d2af
fix(neural): bound inference waits and preserve queued source evidence
hyperpolymath Nov 4, 2026
e9feaca
test(neural): drain timed-out prediction before restoring test roots
hyperpolymath Nov 4, 2026
c546e2f
Merge branch 'main' into fix/qualified-learning-integration-20261104
hyperpolymath Nov 4, 2026
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
11 changes: 6 additions & 5 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ Hypatia is the neurosymbolic CI/CD intelligence layer for the hyperpolymath ecos
> against the tree on 2026-08-07. If you change the shape of the system, re-measure
> (`ls lib/**/*.ex | wc -l`, `grep -c "export fn" ffi/zig/src/main.zig`, the child list in
> `lib/application.ex`) rather than editing a number by eye. Known-stale claims and the
> full audit live in `docs/DEBT-REGISTER.md`.
> full audit live in `docs/DEBT-REGISTER.adoc`.

## Architecture

```
Hypatia # 142 Elixir modules total (`shopt -s globstar; ls lib/**/*.ex | wc -l`)
Hypatia # 149 Elixir source files under lib/ (recursive tree count, 2026-11-04)
├── Elixir pipeline # core: pattern analysis, dispatch, learning
├── Merge orchestration # 12 modules — leases, ledger, ticker (largest subsystem)
├── Kin subsystem # 6 modules — contingency, arbiter, gate, watchdog
Expand Down Expand Up @@ -152,7 +152,8 @@ OutcomeTracker.record_outcome() -- Feedback loop
| `sequence_model.ex` | Sequence | Sequential dispatch modelling |
| `blackboard.ex` | ETS | Shared board all 8 networks read/write, six phases |
| `coordinator.ex` | GenServer | Orchestrates all 8 networks over the blackboard |
| `persistence.ex` | — | Warm-restart state for all 8 networks |
| `persistence.ex` | — | Matching source snapshots; ESN/LSM summaries; trust rebuilt |
| `source_store.ex` | — | Captured root identity and explicit lifecycle refusal |
| `rebalancer.ex` | — | Training-data rebalancing, strategies A/B/C |
| `prover_recommender.ex` | — | Recommends a prover for a proof obligation |

Expand All @@ -162,7 +163,7 @@ OutcomeTracker.record_outcome() -- Feedback loop
|--------|---------|
| `training_pipeline.ex` | ESN/RBF training from real verisim-data outcomes + pattern vectors |

Training pipeline reads outcomes/*.jsonl for ESN (confidence time series) and patterns/registry.json for RBF (8-D feature vectors). Coordinator's `:force_cycle` triggers training automatically.
Training pipeline reads outcomes/*.jsonl for ESN (confidence time series) and patterns/registry.json for RBF (8-D feature vectors). `Coordinator.force_cycle/0` admits a source-bound queued request; `:ok` does not claim completed training. Status and health calls refuse mismatched or blocked lifecycles. See `docs/architecture/neural-source-lifecycle.adoc` for the return contracts and qualification boundary.

### Idris2 ABI (src/Hypatia/ABI/)

Expand Down Expand Up @@ -297,7 +298,7 @@ into redoing finished work.
9. **Zig FFI is ungated** — 18 exports and 16 connectors, no `zig build` in any workflow.

The full evidence-backed audit, including CI/CD, licence, proof and metadata debt, is
`docs/DEBT-REGISTER.md`. Read it before trusting any count in an older document.
`docs/DEBT-REGISTER.adoc`. Read it before trusting any count in an older document.

## Code Style

Expand Down
20 changes: 10 additions & 10 deletions .github/workflows/actions.lock
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ workflows:
- 'actions/upload-artifact@v7.0.2'
- 'dtolnay/rust-toolchain@v1'
- 'taiki-e/install-action@v2.88.0'
'.github/workflows/cicd-squabbler.yml': []
'.github/workflows/ci-health-sweep.yml':
- 'actions/checkout@v7.0.1'
- 'step-security/harden-runner@v2.22.3'
Expand All @@ -30,6 +29,7 @@ workflows:
- 'haskell-actions/setup@v2.12.1'
- 'swatinem/rust-cache@v2.9.3'
- 'taiki-e/install-action@v2.88.0'
'.github/workflows/cicd-squabbler.yml': []
'.github/workflows/clusterfuzzlite.yml':
- 'actions/checkout@v7.0.1'
- 'google/clusterfuzzlite@v1'
Expand All @@ -49,12 +49,12 @@ workflows:
- 'actions/upload-artifact@v7.0.2'
- 'step-security/harden-runner@v2.22.3'
'.github/workflows/governance.yml':
- 'metadatastician/standards@1725bebd3773ea25627479f813283abf1c497a85'
- 'metadatastician/standards@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12'
'.github/workflows/hypatia-remediation-sweep.yml':
- 'actions/upload-artifact@v7.0.2'
- 'step-security/harden-runner@v2.22.3'
'.github/workflows/hypatia-scan.yml':
- 'metadatastician/standards@1725bebd3773ea25627479f813283abf1c497a85'
- 'metadatastician/standards@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12'
'.github/workflows/inbox-steward-intake.yml':
- 'actions/checkout@v7.0.1'
- 'step-security/harden-runner@v2.22.3'
Expand All @@ -68,7 +68,7 @@ workflows:
- 'actions/upload-artifact@v7.0.2'
- 'erlef/setup-beam@v1.24.1'
'.github/workflows/mirror.yml':
- 'metadatastician/standards@1725bebd3773ea25627479f813283abf1c497a85'
- 'metadatastician/standards@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12'
'.github/workflows/pages.yml':
- 'actions/checkout@v7.0.1'
- 'actions/deploy-pages@v5.0.1'
Expand Down Expand Up @@ -108,10 +108,9 @@ workflows:
- 'dtolnay/rust-toolchain@v1'
- 'swatinem/rust-cache@v2.9.3'
'.github/workflows/scorecard.yml':
- 'metadatastician/standards@1725bebd3773ea25627479f813283abf1c497a85'
- 'metadatastician/standards@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12'
'.github/workflows/secret-scanner.yml':
- 'metadatastician/standards@1725bebd3773ea25627479f813283abf1c497a85'
'.github/workflows/standards-integration.yml': []
- 'metadatastician/standards@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12'
'.github/workflows/security-policy.yml':
- 'actions/cache@v6.1.0'
- 'actions/checkout@v7.0.1'
Expand All @@ -122,6 +121,7 @@ workflows:
- 'gitleaks/gitleaks-action@v3.0.0'
- 'taiki-e/install-action@v2.88.0'
- 'trufflesecurity/trufflehog@v3.99.7'
'.github/workflows/standards-integration.yml': []
'.github/workflows/tests.yml':
- 'actions/cache@v6.1.0'
- 'actions/checkout@v7.0.1'
Expand Down Expand Up @@ -373,9 +373,9 @@ dependencies:
commit: 'sha1-e384daf6167a7a7567642d6a62060106244d2413'
owner_id: 6759885
repo_id: 1352485172
'metadatastician/standards@1725bebd3773ea25627479f813283abf1c497a85':
ref: '1725bebd3773ea25627479f813283abf1c497a85'
commit: 'sha1-1725bebd3773ea25627479f813283abf1c497a85'
'metadatastician/standards@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12':
ref: 'a797d308c0517d4e2d21cc7f1cb08d41f82b1a12'
commit: 'sha1-a797d308c0517d4e2d21cc7f1cb08d41f82b1a12'
owner_id: 297579217
repo_id: 1116521501
uses:
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/escript-soundness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,11 @@ jobs:
run: |
set -euo pipefail
mkdir -p "$HOME/.local/bin"
curl -fsSL -o "$HOME/.local/bin/nickel" \
curl --fail --silent --show-error --location \
--proto '=https' --proto-redir '=https' \
--connect-timeout 20 --max-time 60 \
--retry 3 --retry-delay 2 --retry-max-time 180 \
-o "$HOME/.local/bin/nickel" \
"https://github.com/tweag/nickel/releases/download/${NICKEL_VERSION}/nickel-x86_64-linux"
echo "${NICKEL_SHA256} $HOME/.local/bin/nickel" | sha256sum -c -
chmod +x "$HOME/.local/bin/nickel"
Expand Down
16 changes: 5 additions & 11 deletions .github/workflows/governance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,11 @@ permissions:

jobs:
governance:
# Standards pin (immutable, do not float): 1725beb… is the first
# standards revision whose actions allowlist contains
# `metadatastician/standards/.github/workflows/*@*` and whose mirror
# reusable gates SSH-host verification on the key being configured.
# The previous pin (333b06a…) lacked that pattern, so Allowlist
# Preflight failed on the five canon reusables themselves — a
# pinned-policy mismatch (category 3), not five genuine findings.
# Bump all five standards callers + actions.lock together; see
# docs/consumers/standards-governance.adoc and
# test/standards-integration-test.sh.
uses: metadatastician/standards/.github/workflows/governance-reusable.yml@1725bebd3773ea25627479f813283abf1c497a85
# Published standards PR #1394 includes the two exact ClusterFuzzLite
# action paths already admitted by live policy. All five callers share
# this immutable authority; actions.lock is generated by the official
# recovery runner, never patched by hand.
uses: metadatastician/standards/.github/workflows/governance-reusable.yml@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12
Comment thread
hyperpolymath marked this conversation as resolved.
Resolved
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
# Scanner pin: hypatia scans itself with its own main branch. On a PR that
# is the base commit; on push, schedule or dispatch it is the commit being
# run. It is never the PR head, so a PR cannot weaken the rules that gate
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/hypatia-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ permissions:

jobs:
hypatia:
uses: metadatastician/standards/.github/workflows/hypatia-scan-reusable.yml@1725bebd3773ea25627479f813283abf1c497a85
uses: metadatastician/standards/.github/workflows/hypatia-scan-reusable.yml@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12
# Scanner pin: hypatia's own main branch, never the PR head. See governance.yml.
with:
hypatia-ref: ${{ github.event.pull_request.base.sha || github.sha }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mirror.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ permissions:

jobs:
mirror:
uses: metadatastician/standards/.github/workflows/mirror-reusable.yml@1725bebd3773ea25627479f813283abf1c497a85
uses: metadatastician/standards/.github/workflows/mirror-reusable.yml@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12
# Only the seven forge keys the callee declares (standards#1108 §6b).
secrets:
GITLAB_SSH_KEY: ${{ secrets.GITLAB_SSH_KEY }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ permissions:

jobs:
scorecard:
uses: metadatastician/standards/.github/workflows/scorecard-reusable.yml@1725bebd3773ea25627479f813283abf1c497a85
uses: metadatastician/standards/.github/workflows/scorecard-reusable.yml@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12
permissions:
actions: read
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/secret-scanner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ jobs:
contents: read
pull-requests: write
actions: read
uses: metadatastician/standards/.github/workflows/secret-scanner-reusable.yml@1725bebd3773ea25627479f813283abf1c497a85
uses: metadatastician/standards/.github/workflows/secret-scanner-reusable.yml@a797d308c0517d4e2d21cc7f1cb08d41f82b1a12
15 changes: 14 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,20 @@ jobs:

- name: E0 outcome chain and cross-repo evidence regression (Elixir)
run: |
mix test test/outcome_tracker_test.exs test/cross_repo_learning_test.exs
mix test --trace \
test/outcome_tracker_test.exs \
test/cross_repo_learning_test.exs \
test/outcome_tracker_runtime_store_test.exs \
test/merge_orchestration/sensor_test.exs \
test/merge_orchestration/loop_test.exs \
test/learning_runtime_store_test.exs \
test/neural_source_store_lifecycle_test.exs \
test/merge_orchestration/strategist_test.exs \
test/merge_orchestration/dispatcher_test.exs \
test/merge_orchestration/baton_emitter_test.exs \
test/merge_orchestration/kin_competence_test.exs \
test/merge_orchestration/merge_orchestrate_task_test.exs \
test/workflow_hardening_test.exs

- name: Run E2E test suite
run: bash tests/e2e.sh
Expand Down
3 changes: 2 additions & 1 deletion .machine_readable/descriptiles/PLAYBOOK.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ steps = [
[maintenance-operations]
baseline-audit = "mix test && cargo test && just validate"
hard-pass-gate = "mix test 0 failures (233 :verisim_data excluded by design)"
neural-retrain = "GenServer.call(Hypatia.Neural.Coordinator, :force_cycle)"
neural-retrain = "Hypatia.Neural.Coordinator.force_cycle() — :ok means queued; inspect Coordinator.status() for source refusal and cycle completion"
neural-source-lifecycle = "docs/architecture/neural-source-lifecycle.adoc — an observed data-root change requires an explicit decision and fresh matching cohort; no automatic relabel/restart"
scan-estate = "just scan (runs panic-attack assail across estate, writes to verisim-data)"
dispatch-run = "just dispatch (runs dispatch-runner.sh against pending.jsonl)"
crg-check = "Review STATE.a2ml [project-context] crg-grade vs crg-grade-target"
Expand Down
10 changes: 10 additions & 0 deletions .machine_readable/descriptiles/STATE.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -298,3 +298,13 @@ actions = [
# Benchmarks confirmed real in fixer/benches/hypatia_bench.rs (7 benches, not stubs).
# 2026-04-03: Added 3 new rules: WF013 (permissions typo detection), GS007 (stale branch detection),
# SD013 (gitignore path-scope detection). 279 lines of new rule code, 13 tests.

[neural-source-lifecycle]
status = "authored-pending-hosted-qualification"
checkpoint-date = "2026-11-04"
contract = "docs/architecture/neural-source-lifecycle.adoc"
source-identity = "expanded configured data-root pathname; not content authentication"
new-regression-source = "test/neural_source_store_lifecycle_test.exs"
authored-new-test-functions = 22
qualification = "No execution receipt for this new lifecycle candidate. Existing runtime-path test receipts do not qualify it. Exact-source compile, focused and normal full gates remain required."
authority = "No automatic restart, dispatch, or deployment promotion from a source refusal."
Loading
Loading