Integrate stranded merges: agent state store (#9) and FOUNDATION.md (#33)#34
Merged
Conversation
…ssue #7 A+B) WHAT: (1) modulex-core/store.rs — rusqlite (bundled) store at $MODULEX_STORE → [store] path → ~/.modulex/store.db; schema v1 (reminders, countdowns, watches + reserved ical_feeds/mcp_servers; PRAGMA user_version); generation-stamped rows (created_gen/done_gen/ retired_gen/last_seen_gen — counters, never clocks); plain-JSON export/import (sovereignty: no SQLite lock-in). (2) Engine grows an optional store: seeds its generation counter from meta.last_generation and persists it after each run, so generations are MONOTONIC ACROSS RESTARTS; RunContext carries the store. (3) Steps: new 'reminders' (overdue → due-today → upcoming → undated, recurrence tags); countdown-calc now merges config + store entries; new 'url-watch' (feature web, default on) fetching through agent-bridle-tool-web — net-axis Caveats + SSRF screen + redirect re-check + DNS-rebind pin — BLAKE3-hashing extracted content and reporting changed/unchanged since the last seen generation. ExecGate exposes read-only tool_context() for in-proc leashed tools. (4) MCP tools: reminder_add/list/done, countdown_add/retire, watch_add/list/remove, store_export — mutation stamps use the engine's current generation ('registered after run N'). (5) CLI: modulex remind add/list/done + modulex store export/import; doctor reports store health. WHY: issue #7 phases A+B — agents say 'remind me of X' through modulex tools instead of hand-editing config; URL tracking lands behind the same deterministic surface. 118 tests; live smoke proved the full loop including cross-process generation persistence. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Agent state store: SQLite reminders/countdowns/watches + leashed url-watch
WHAT: docs/FOUNDATION.md — the founding architecture document. Names the problem (MCP servers bloat by default: schema flooding, prose coupling, monolith creep), the three pillars that eliminate it structurally (#26 data contract, #32 progressive disclosure, #10 declared-authority plugin crates), how they interlock (capability = step type + data schema + optional facet tool + plugin crate; the cost table), the ordered implementation plan (F1 data-contract core → F2 tool-registry refactor → F3 disclosure mechanisms → F4 routine_eval → F5 reference plugin + authoring guide), the definition of done, and the standing anti-bloat law (steps before tools; CI-pinned ≤12 tool budget; versioned schemas; declared authority; disclosure tier stated per PR). README repositioned to lead with the why; CLAUDE.md gains the foundation-pass section gating plugin-backlog work until the pass lands. WHY: This is why the project exists — the anti-bloat construction is the unique, community-valuable artifact; the morning routine is its demo. The pass gets built first; the 20-suite backlog follows it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs: the foundation pass — anti-bloat by construction
…to integrate/stranded-merges
…grate/stranded-merges
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
#9 and #33 were merged into their (stacked) base branches after those bases had already landed on main — so main never received the agent state store or the foundation document. This PR brings both merge results onto main verbatim (no new code).
pr6/release-path-newt-paritytip: the agent state store (Agent state store: SQLite reminders/countdowns/watches + leashed url-watch #9 — SQLite store, reminders/countdowns/watches tools, url-watch, cross-restart generations)docs/scrub-provenancetip: docs/FOUNDATION.md + README/CLAUDE.md repositioning (docs: the foundation pass — anti-bloat by construction #33)Stacked-PR lesson for the queue: retarget to main before merging once the base lands (GitHub merges into whatever the base ref is at click time).
Test plan
just checkgreen on the integration: 118 tests, clippy-D warningscleandocs/FOUNDATION.mdandcrates/modulex-core/src/store.rspresent; live store smoke was done on Agent state store: SQLite reminders/countdowns/watches + leashed url-watch #9 before its merge