Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
710ac21
docs(release): promote Unreleased -> v0.9.0
rhenley1958 May 6, 2026
e738208
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 May 6, 2026
546331b
chore(submodule): bump homebrew-mdemg to v0.9.0 formula + docs
rhenley1958 May 6, 2026
e550f72
fix(api): /healthz returns build-time version, not stale literal "0.6.0"
rhenley1958 May 7, 2026
9e767f4
fix(service): replace decommissioned mlx-server LaunchAgent with llam…
rhenley1958 May 7, 2026
8620529
docs(sprint): MODEL-DIST-001 sprint plan + quant manifest skeleton
rhenley1958 May 7, 2026
bfbaa67
feat(model-dist-001): Epic 1 — built Q4_K_M + Q8_0 fused GGUFs
rhenley1958 May 11, 2026
764f3b6
docs(model-dist-001): Epic 2 — defer adapter to MODEL-DIST-002
rhenley1958 May 11, 2026
4f0f180
feat(model-dist-001): Epic 3 — 3 Modelfiles + local ollama create (pu…
rhenley1958 May 11, 2026
a216b1f
feat(model-dist-001): Epic 4 — `mdemg model` CLI + pluggable Fetcher …
rhenley1958 May 11, 2026
66fc67f
feat(model-dist-001): Epic 5 — V0021 model_install_events hypertable …
rhenley1958 May 11, 2026
1f5935b
docs(model-dist-001): Epic 7 — local-model-distribution feature doc
rhenley1958 May 11, 2026
d91a66e
docs(model-dist-001): Epic 8 — Documentation Update (main repo)
rhenley1958 May 11, 2026
87293f8
feat(model-dist-001): Epic 3 closeout — Ollama Library push complete
rhenley1958 May 11, 2026
659514c
docs(model-dist-001): sprint close — post.md
rhenley1958 May 11, 2026
1e5930a
merge: resolve quant_manifest.json conflicts (Epic 3 closeout vs squa…
rhenley1958 May 11, 2026
996a482
docs(release): promote Unreleased -> v0.10.0
rhenley1958 May 11, 2026
eb81291
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 May 11, 2026
45d5af7
chore(submodule + docs): bump homebrew-mdemg to v0.10.0 + cli-referen…
rhenley1958 May 11, 2026
109e12f
feat(cli): add mdemg model run wrapper (follow-up #1 to MODEL-DIST-001)
rhenley1958 May 21, 2026
f37add8
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 May 21, 2026
e7c1382
docs(api): document 19 previously-undocumented endpoints (follow-up #2)
rhenley1958 May 21, 2026
c895316
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 May 21, 2026
7679fec
feat(grafana-audit): Epic 0 — sprint plan + audit harness
rhenley1958 May 21, 2026
4c437d9
feat(grafana-audit): Epic 1 + 2 — full audit + findings
rhenley1958 May 21, 2026
0a1e8e1
fix(grafana): Epic 3 — 5 panels recovered (3 FAIL + 2 schema-drift)
rhenley1958 May 21, 2026
2417530
docs(grafana-audit): Epic 4 + 7 — feature doc + sprint close
rhenley1958 May 21, 2026
1a3238c
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 May 21, 2026
cfab578
feat(model-dist-002): Epic 0 — sprint plan + workspace prep
rhenley1958 May 21, 2026
2dc377c
feat(model-dist-002): Epic 1-3 — MLX adapter → PEFT → GGUF LoRA + liv…
rhenley1958 May 25, 2026
36568af
feat(model-dist-002): Epic 4 local — Modelfile.adapter + ollama create
rhenley1958 May 25, 2026
9fab128
feat(cli): enable mdemg model pull --adapter (MODEL-DIST-002 Epic 5+6)
rhenley1958 May 25, 2026
6c84c86
docs(model-dist-002): flip adapter section to shipped + sprint close
rhenley1958 May 25, 2026
2122333
docs(eventgraph-001): sprint plan (Pattern Y1 TSDB-federation)
rhenley1958 May 27, 2026
992fa32
feat(tsdb): V0022 reinforcement_events hypertable (EVENTGRAPH-001 Epi…
rhenley1958 May 27, 2026
a2d1e06
feat(tsdb): buffered reinforcement_events writer (EVENTGRAPH-001 Epic 2)
rhenley1958 May 27, 2026
55a5ecc
refactor(learning): expose per-pair telemetry from Hebbian Cypher (EV…
rhenley1958 May 27, 2026
b93df79
feat(learning): record reinforcement events to TSDB (EVENTGRAPH-001 E…
rhenley1958 May 27, 2026
2c70548
feat(eventgraph): federation query helper + API endpoint (EVENTGRAPH-…
rhenley1958 May 27, 2026
429a197
feat(observability): Grafana panel + Prometheus counters for reinforc…
rhenley1958 May 27, 2026
75c6ea7
fix(eventgraph-001): restore full GRAFANA-AUDIT-001 audit_results.json
rhenley1958 May 27, 2026
f307f55
fix(retrieval): set Activation on RRF RetrieveResult (EVENTGRAPH-001 …
rhenley1958 May 27, 2026
5a346c6
docs(eventgraph-001): Tier 3 live e2e verification transcript (Epic 7)
rhenley1958 May 27, 2026
321c861
docs(eventgraph-001): feature doc + CHANGELOG + CLAUDE.md + sprint cl…
rhenley1958 May 27, 2026
e6e40f3
Merge branch 'main' into reh3376_dev01
reh3376 May 27, 2026
d8a1dc4
fix(eventgraph-001): Grafana panel uses TSDB instead of unconfigured …
rhenley1958 May 29, 2026
55b976f
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 May 29, 2026
67a7169
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 May 29, 2026
bf74cc1
docs(rrf-scale-001): sprint plan — RRF score-scale consumer remediation
rhenley1958 Jun 3, 2026
d0c2429
docs(rrf-scale-001): Epic 1 audit findings — 12 sites cataloged
rhenley1958 Jun 3, 2026
432693d
fix(consulting): RRF-calibrate score gates + confidence sigmoid (RRF-…
rhenley1958 Jun 3, 2026
0859e3c
docs(rrf-scale-001): Epic 3 — remaining LOW findings reviewed + decided
rhenley1958 Jun 3, 2026
5cac4b8
test(rrf-scale-001): Tier 2 integration + Tier 3 live verification (E…
rhenley1958 Jun 3, 2026
3fdc2d2
docs(rrf-scale-001): CHANGELOG + CLAUDE.md score-scale contract + pos…
rhenley1958 Jun 3, 2026
5c9d145
test(rrf-scale-001): skip guidance integration tests on empty environ…
rhenley1958 Jun 4, 2026
45fca05
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 Jun 4, 2026
64ae22f
docs(jiminy-outcome-001): sprint plan — revive Neo4j GUIDANCE_OUTCOME…
rhenley1958 Jun 8, 2026
5a5b1fb
feat(jiminy): embedding-similarity constraint-code matching (JIMINY-O…
rhenley1958 Jun 8, 2026
e09660f
test(jiminy-outcome-001): Tier 2 integration + Tier 3 live verificati…
rhenley1958 Jun 8, 2026
e0f9b90
docs(jiminy-outcome-001): CHANGELOG + CLAUDE.md + post.md (Epic 3)
rhenley1958 Jun 8, 2026
18f85b7
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 Jun 8, 2026
36814b4
docs(guidance-synth-001): sprint plan — fix guidance synthesis timeou…
rhenley1958 Jun 8, 2026
a9b9a9a
feat(consulting): parallelize per-node constraint classifier (GUIDANC…
rhenley1958 Jun 8, 2026
e41c2f6
feat(jiminy): config-drive warm-compute timeout (GUIDANCE-SYNTH-001 E…
rhenley1958 Jun 8, 2026
0756621
test+docs(guidance-synth-001): Tier 2/3 verification + docs + close (…
rhenley1958 Jun 8, 2026
852be2a
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 Jun 8, 2026
a3bf790
docs(followup-c): close JSON control-char escaping as NON-ISSUE (no fix)
rhenley1958 Jun 8, 2026
0526504
fix(jiminy): /guide 30s timeout sibling + single-source config defaul…
rhenley1958 Jun 8, 2026
4d4aa9a
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 Jun 8, 2026
eeadad3
docs(eventgraph-cli-001): sprint plan — federation consumer CLI + UAT…
rhenley1958 Jun 8, 2026
f67bfe4
feat(eventgraph-cli-001): mdemg eventgraph reinforcement-neighborhood…
rhenley1958 Jun 8, 2026
9bf981b
fix(eventgraph): neighbor_node_ids serializes as [] not null for empt…
rhenley1958 Jun 8, 2026
3b6567d
test(eventgraph-cli-001): UATS contract spec for federation API (Epic 2)
rhenley1958 Jun 8, 2026
6f3c9a7
docs(eventgraph-cli-001): live verification + feature doc + CHANGELOG…
rhenley1958 Jun 8, 2026
f24b227
fix(eventgraph-cli-001): tag UATS spec 'tsdb' so CI skips it without …
rhenley1958 Jun 8, 2026
c85385a
Merge remote-tracking branch 'origin/main' into reh3376_dev01
rhenley1958 Jun 8, 2026
7d33900
docs(eventgraph-002): sprint plan — guidance-outcome federation (Epic 0)
rhenley1958 Jun 8, 2026
a97dee6
feat(eventgraph-002): V0023 constraint_code index on constraint_outco…
rhenley1958 Jun 8, 2026
48fbd80
feat(eventgraph-002): GuidanceOutcomesInNeighborhood federation metho…
rhenley1958 Jun 8, 2026
d8639a5
feat(eventgraph-002): guidance-outcome federation handler + route (Ep…
rhenley1958 Jun 8, 2026
0abf082
feat(eventgraph-002): mdemg eventgraph guidance-outcome-neighborhood …
rhenley1958 Jun 8, 2026
8092e0d
test(eventgraph-002): UATS contract spec for guidance-outcome federat…
rhenley1958 Jun 8, 2026
d68fd53
docs(eventgraph-002): Tier 3 live verification (Epic 6)
rhenley1958 Jun 8, 2026
e2cf6d7
docs(eventgraph-002): feature doc + CHANGELOG + CLAUDE.md + close (Ep…
rhenley1958 Jun 8, 2026
4cc7608
fix(metrics,backup): resolve docker binary robustly under minimal lau…
rhenley1958 Jun 8, 2026
be57209
docs(nosilent-001): sprint plan — fail-loud scheduled jobs (Epic 0)
rhenley1958 Jun 8, 2026
df41e9d
feat(nosilent-001): V0024 scheduled_job_events + writer (Epic 1)
rhenley1958 Jun 8, 2026
cc67e9d
feat(nosilent-001): record + alert on scheduled-job outcomes (Epic 2)
rhenley1958 Jun 8, 2026
4633c01
feat(nosilent-001): scheduled-job staleness + failure alert rules (Ep…
rhenley1958 Jun 8, 2026
50e8feb
fix(nosilent-001): distinct services for job rules so neither masks t…
rhenley1958 Jun 8, 2026
f1c1567
docs(nosilent-001): feature doc + CHANGELOG + CLAUDE.md + close (Epic 4)
rhenley1958 Jun 8, 2026
c14a340
fix(nosilent-001): sync embedded launchd server plist with source (CI)
rhenley1958 Jun 8, 2026
59147f3
docs(roadmap): add jiminy-governance skill build-out (Workstream C, A…
rhenley1958 Jun 8, 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
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- **Sprint NOSILENT-001 — Fail-loud scheduled jobs (no silent failures)** (2026-06-08). Triggered by a live-discovered silent failure: with `TSDB_BACKUP_ENABLED=true`, the backup scheduler ran every 24h, its `docker compose pg_dump` failing every time (docker not on the launchd PATH), surfacing only a buried `slog.Warn`. A core data-protection job, silently broken. This sprint kills the *class*.
- **V0024 `scheduled_job_events` hypertable** + synchronous `RecordJobEvent` writer (mirrors V0021). One row per run of a scheduled job: `job_name`, `success`, `latency_ms`, `error_message`, `metadata`. Schema 23→24.
- **`internal/jobhealth.Report`** — single policy point: record the outcome + fire a high-severity alert on failure (pool + dispatcher nil-safe). Wired into all three scheduled jobs: TSDB backup scheduler (decoupled result hook + server dispatcher), `maintenance` + `export-auto` (CLI → short-lived pool + file-backed dispatcher writing the same `~/.mdemg/alerts/current.json` the hooks surface).
- **Two server-native alert rules** over `scheduled_job_events`: `scheduled_job_recent_failure` (any failure in `JOB_FAILURE_LOOKBACK_MIN`) and `backup_no_recent_success` (zero successful backups in the staleness window — **the "job never ran" guarantee**, firing from the server observing *absent* success, gated on `TSDB_BACKUP_ENABLED`). Distinct alert services so the `(service, severity)` cooldown never lets one mask the other.
- **Config-driven** (no hardcoded literals): `JOB_HEALTH_ALERT_ENABLED` (default true), `JOB_BACKUP_STALENESS_HOURS` (0 → derive from backup interval × 2), `JOB_FAILURE_LOOKBACK_MIN` (60).
- **Live-verified (Tier 3):** induced a real `maintenance` failure → immediate alert + failure row + evaluator failure rule fired; the staleness rule fired for the never-succeeded backup; both surfaced as distinct alert-file entries. A live-caught cooldown-collision (both rules sharing one service → one masked the other) was fixed in-sprint. Feature doc: `docs/features/scheduled-job-health.md`. Sprint: `docs/development/nosilent-001/`.

- **Sprint EVENTGRAPH-002 — Guidance-outcome federation (Pattern Y1, second event class)** (2026-06-08). Federates the guidance-outcome event stream: walk a constraint's Neo4j neighborhood, surface the time-windowed `constraint_outcomes` (followed/ignored/contradicted) for the constraint **and its graph-related constraints**. Answers "how well is this constraint and its conceptual cluster being followed?" — which `GetConstraintEffectiveness` (per-constraint, no neighborhood, no time-series) can't.
- **Endpoint:** `POST /v1/eventgraph/guidance-outcome-neighborhood`. **CLI:** `mdemg eventgraph guidance-outcome-neighborhood` (`--seed`/`--query`/`--hops`/`--since`/`--limit`/`--json`; table shows followed/ignored split + per-outcome code/outcome/sim/guidance_id, or `--json`).
- **Reuses the existing `constraint_outcomes` sink** — no new hypertable/writer/enqueue site (RRF-SCALE-001 already populates it). Data-decided: a parallel sink would duplicate populated data.
- **Joins graph↔events on `constraint_code`** (TSDB `constraint_id` is a UUID that doesn't match the Neo4j `node_id` CUID; code is the only viable key). Walk collects neighborhood codes → query `constraint_outcomes WHERE constraint_code = ANY(codes)` → Go-side join resolves each outcome's `constraint_node_id`.
- **Single-source refactor:** extracted the shared federation gate (`eventgraphGate`) + default-resolution (`resolveFederationDefaults`, hops/since/limit/ceiling) into helpers used by **both** the reinforcement and guidance-outcome handlers — one place to change the rules. Reinforcement endpoint un-regressed (UATS still 6/6 live).
- **Tests:** Tier 1 (`-race`: validation, empty-arrays-not-null, join, CLI request-mapping/render); Tier 2 (live integration round-trip hops=1/0/unknown-seed + UATS 6/6 live); Tier 3 (real binary cross-checked against direct SQL — **11 outcomes = 11, all followed**; the `--query` "0 outcomes" result traced to SQL ground truth as correct, not a join bug). Sprint in `docs/development/eventgraph-002/`. Feature doc: `docs/features/event-graph-federation.md`.

### Changed

- **TSDB schema version 23 → 24** (NOSILENT-001 V0024). Additive migration `024_scheduled_job_events.sql` adds the `scheduled_job_events` hypertable (scheduled-job run outcomes). `TSDB_REQUIRED_SCHEMA_VERSION` default bumped to 24. No data change; idempotent; rollback = `DROP TABLE` + revert the default.

- **TSDB schema version 22 → 23** (EVENTGRAPH-002 V0023). Additive migration `023_constraint_outcomes_code_index.sql` adds `idx_constraint_outcomes_code (space_id, constraint_code, time DESC)` to back the guidance-outcome federation join. `TSDB_REQUIRED_SCHEMA_VERSION` default bumped to 23. No data change; idempotent; rollback = `DROP INDEX` + revert the default.

- **Sprint EVENTGRAPH-CLI-001 — `mdemg eventgraph reinforcement-neighborhood`: the first consumer of the federation API** (2026-06-08). EVENTGRAPH-001 shipped the `POST /v1/eventgraph/reinforcement-neighborhood` federation endpoint but nothing consumed it. This sprint ships the operator-facing CLI consumer + a live-testing harness for the EVENTGRAPH line (002/003 follow on).
- **CLI:** `mdemg eventgraph reinforcement-neighborhood` walks the graph from a seed and renders the reinforcement (Hebbian co-activation) events touching that neighborhood — a summary + table (`new` column = `created_new_edge`, `nbhd` = which endpoints fell inside the N-hop walk), or `--json` for piping. Seed via `--seed n_…` or `--query "<text>"` (resolves the seed from the top `/v1/memory/retrieve` result). `--hops`/`--since`/`--limit` are **omitted from the request when unset** so the server applies its own config defaults — no second copy of the defaults hardcoded in the CLI (single source of truth).
- **UATS contract:** `eventgraph_reinforcement_neighborhood.uats.json` (6 cases, validated 6/6 live) backfills the contract-test gap EVENTGRAPH-001 left: happy-200 response shape, required-field 400s, negative-hops 400, over-ceiling 400, GET 405. sha256-hashed.
- **Live verification (Tier 3):** the real binary against the real stack surfaced **20 reinforcement events in a 5-node neighborhood**, demonstrating the full Hebbian-write → federation-read loop closing in one command (the `--query` retrieval fired `ApplyCoactivation`, and the federation read those very events back). `--limit` truncation, `--json`, unknown-seed, and no-arg error paths all verified live. See `docs/development/eventgraph-cli-001/verification.md`.

### Fixed

- **`docker` CLI unresolvable under the launchd minimal PATH — server-runtime shellouts silently failing** (2026-06-08). The native server (launchd) inherits `PATH=/usr/bin:/bin:/usr/sbin:/sbin`, which excludes the Docker Desktop symlink (`/usr/local/bin/docker`). Two server-runtime `docker` shellouts failed with "executable file not found in $PATH": (1) Neo4j container CPU/mem stats logged an ERROR every 60s and left the `neo4j_container_*` gauges empty (so the `neo4j_high_cpu/_memory` alert rules had no data); (2) the TSDB backup scheduler's `docker compose pg_dump` failed with only a `slog.Warn`. The data plane was never affected — Neo4j (Bolt) + TSDB (pgx) connect over mapped TCP ports, not the docker CLI. Fix: new `internal/dockerbin` resolver (`MDEMG_DOCKER_BIN` env → `exec.LookPath` → well-known install locations → graceful unavailable), wired into both shellouts; the perpetual ERROR downgraded to a one-shot WARN when docker is genuinely absent; a sane `PATH` added to the launchd server plist template. Live-verified: container gauges now land in `metric_samples`; backup resolves docker under a simulated minimal PATH. (`export-auto` was **not** a victim — it exports via network SQL, not docker.)

- **`neighbor_node_ids` serialized as `null` (not `[]`) for an empty neighborhood — caught in EVENTGRAPH-CLI-001 live contract testing** (2026-06-08). `eventgraph.walkNeighborhood` returns a nil slice when the seed has no neighborhood (e.g. an unknown seed), which JSON-marshals to `null`, while the sibling `events` field was already initialized to `[]`. Both are array fields and must serialize consistently — `null` breaks any consumer asserting an array type (incl. the new UATS contract's `type_is array`). `EventsInGraphNeighborhood` now coalesces the nil slice to `[]string{}`; `TestFederationResult_EmptyArraysNotNull` pins the contract. Standard Go unit tests missed it (they don't marshal the empty result); the live UATS happy-path against the running server caught it immediately — its own fix-commit per the live-smoke precedent.


Expand Down
Loading
Loading