Skip to content

Feat/langextract supabase realtime - #5

Merged
POWERFULMOVES merged 21 commits into
mainfrom
feat/langextract-supabase-realtime
Sep 9, 2025
Merged

Feat/langextract supabase realtime#5
POWERFULMOVES merged 21 commits into
mainfrom
feat/langextract-supabase-realtime

Conversation

@POWERFULMOVES

Copy link
Copy Markdown
Owner

No description provided.

PMOVES Bot added 21 commits September 8, 2025 09:50
- Add understanding docs (vendor embedded repo)
- Keep PDFs/DOCX; update .gitignore
- Makefile heredoc fix for Windows
- Add bootstrap/env check scripts and tools
feat(hirag): normalize embeddings fallback + ensure cosine collection
chore(cuda): use CUDA wheels for torch (2.3.1+cu121) in media-*
…): server-side roster; chore(make): add web-geometry target
…ation with smart boundaries; /yt/emit CGP + upsert to HiRAG; hi-rag v2 /hirag/upsert-batch (+Meili); smoketests + docs.
…s) via Whisper segment heuristics; docs updated.
… checks: include pmoves-yt (8077) and ffmpeg-whisper (8078).
…ht target; docs: health section and usage.
…reflight HTTP checks; smoketests and docs for Discord/Jellyfin.
@coderabbitai

coderabbitai Bot commented Sep 9, 2025

Copy link
Copy Markdown
Contributor

Important

Review skipped

More than 25% of the files skipped due to max files limit. The review is being skipped to prevent a low-quality review.

56 files out of 176 files are above the max files limit of 100. Please upgrade to Pro plan to get higher limits.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands and usage tips.

@POWERFULMOVES
POWERFULMOVES merged commit 3afaec0 into main Sep 9, 2025
1 check passed
POWERFULMOVES pushed a commit that referenced this pull request Dec 18, 2025
Updates PMOVES-Open-Notebook to 89db56a which includes:
- fix(ci): use Claude GitHub App for authentication (#5)
- Switches from API key to GitHub App connector
- Resolves actionlint secrets context errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
POWERFULMOVES pushed a commit that referenced this pull request Jan 12, 2026
This commit addresses critical issues #4, #5, and #13 from PR #483 review.

Changes to services/model_lifecycle.py:
- Add idle_timeout_seconds parameter to LoadedModel creation
- Fix load worker to call complete() in exception handler (prevents queue exhaustion)
- Add nested try-except for complete() call itself
- Create LoadedModel with ERROR state when VRAM insufficient
- Set error_message with detailed VRAM information
- Call failure callback before returning from VRAM insufficient path

Changes to services/vllm_client.py:
- Complete incomplete VRAM parsing implementation
- Parse vllm:num_gpu_blocks metric and calculate VRAM (2MB per block)
- Parse vllm:gpu_cache_usage_perc metric and estimate VRAM usage
- Add proper error handling for parsing (ValueError, IndexError)
- Add debug logging for metrics fetch failures
- Fallback to 16384MB default if metrics unavailable

Changes to metrics/prometheus.py:
- Use model's configured idle_timeout instead of hardcoded 300
- Read idle_timeout_seconds from model's to_dict() output
- Add helpful comment explaining the change

These fixes ensure:
- Load queue doesn't exhaust processing slots on errors
- VRAM insufficient condition is properly tracked and reported
- vLLM VRAM usage is calculated from actual Prometheus metrics
- Idle timeout is configurable and consistent across all components

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jan 18, 2026
…altime

Feat/langextract supabase realtime
POWERFULMOVES pushed a commit that referenced this pull request Jan 18, 2026
This commit addresses critical issues #4, #5, and #13 from PR #483 review.

Changes to services/model_lifecycle.py:
- Add idle_timeout_seconds parameter to LoadedModel creation
- Fix load worker to call complete() in exception handler (prevents queue exhaustion)
- Add nested try-except for complete() call itself
- Create LoadedModel with ERROR state when VRAM insufficient
- Set error_message with detailed VRAM information
- Call failure callback before returning from VRAM insufficient path

Changes to services/vllm_client.py:
- Complete incomplete VRAM parsing implementation
- Parse vllm:num_gpu_blocks metric and calculate VRAM (2MB per block)
- Parse vllm:gpu_cache_usage_perc metric and estimate VRAM usage
- Add proper error handling for parsing (ValueError, IndexError)
- Add debug logging for metrics fetch failures
- Fallback to 16384MB default if metrics unavailable

Changes to metrics/prometheus.py:
- Use model's configured idle_timeout instead of hardcoded 300
- Read idle_timeout_seconds from model's to_dict() output
- Add helpful comment explaining the change

These fixes ensure:
- Load queue doesn't exhaust processing slots on errors
- VRAM insufficient condition is properly tracked and reported
- vLLM VRAM usage is calculated from actual Prometheus metrics
- Idle timeout is configurable and consistent across all components

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
POWERFULMOVES pushed a commit that referenced this pull request Feb 6, 2026
Addressed PR review findings for Supabase integration:
- Fixed version check source (PyPI → npm registry for Supabase CLI)
- Rewrote up-supabase with proper error handling and health checks
- Added down-supabase, restart-supabase targets
- Added network management (ensure-network, clean-networks)
- Added setup-supabase-volumes for initial volume setup

Error handling improvements:
- Removed || true from DB readiness wait (now fails with context)
- DB timeout shows container status and recent logs on failure
- Volume copy errors are reported instead of silently ignored
- Kong gateway wait has proper timeout and error message

Healthcheck improvements:
- supa-health checks Kong gateway (port 8000)
- Auth service check now uses Kong gateway instead of direct port
- Studio health check respects SUPABASE_STUDIO_PORT variable
- Added container status table for visual verification

Network management:
- ensure-network creates pmoves-net if missing
- clean-networks removes stale networks with empty labels
- Fixes "incorrect label" errors from previous deployments

Port standardization:
- Studio port standardized to 54323 (was 65433 in some places)
- All references updated for consistency

Resolves: Issue #5 (up-supabase Makefile Target) from bring-up-findings
Resolves: Issue #6 (Network Conflicts) from bring-up-findings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 11, 2026
… tool) (#2048)

* feat(voice): Phase 0 — CHIT-sign-triggered expressive voice (no speak tool)

An agent's normal CHIT trail-sign becomes an audible, persona-shaped utterance
with NO speak tool call. Pieces:

- sign_trail.py: env-gated (CHIT_SIGN_PUBLISH=1 + NATS_URL) best-effort publish
  of the signed payload to chit.signed.v1. No-op / behavior-identical when unset;
  fail-fast (never breaks signing). The sign IS the trigger.
- voice_persona_bridge.py: maps the payload's selected_alter/voice (FlOO$ suits:
  mr-clean/dr-bean/buttercup/blossom/bubbles) -> Flute-Gateway intent + persona_id.
  Engine choice flows through the gateway's intent->engine routing (full expressive
  palette; kokoro=CPU floor only). 6 unit tests, all pass.
- voice_cast_on_sign.py: the ONLY listener on chit.signed.v1 -> resolves bridge ->
  POST Flute-Gateway /v1/voice/synthesize/audio -> plays WAV. ffmpeg atempo tempo
  recovery; deterministic health check -> narrate/kokoro CPU-floor fallback when GPU
  unavailable; never crashes the daemon.

Verified: py_compile all; bridge pytest 6/6; sign_trail behavior-identical when the
env gate is unset (PYTHONPATH=repo-root per the known sign_trail invocation gotcha).
Hearing it requires Ultimate TTS Studio (:7860) + NATS (:4222) — that's expected.

Follow-ups (not blocking): flute-gateway gradio_client provider migration (piece 4),
VOICE_CAST_ON_SIGN.md doc; and a design call — analytical personas (dr-bean) map to
intent 'narrate' (kokoro floor); remap to dramatic+subtle to keep them on an
expressive engine if desired.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(voice): address 5090-CLAUDE pair-review — subject, discriminator, auth (PR #2048)

Three blocking contract-boundary fixes from the 5090 pair review:
1. Publish to agent.graphiti.signed.v1 (canonical raw signature.v1 subject),
   NOT chit.signed.v1 — that is a live multi-consumer channel (Consciousness
   8106 / Tokenism 8103 / Evo 8113 / Fordham receipts) with a different
   {schema,tier} envelope. Avoids colliding two payload shapes on one subject.
2. voice_cast_on_sign discriminates on signature-shape fields (glyph + agent_id)
   before casting, so it can never speak a stray envelope (e.g. Fordham dues/
   enrollment/mint receipts) that happens to carry a summary field.
3. _synthesize sends X-API-Key from FLUTE_API_KEY when set + logs 401 distinctly
   — the synth endpoint is behind verify_api_key on fleet nodes; without this it
   401s silently (no audio, daemon looks fine).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(voice): apply non-blocking follow-ups from pair review (PR #2048)

Addresses 5090-CLAUDE's pair-review findings #4-7 on the Phase 0
CHIT-sign-triggered voice pipeline (blocking findings already fixed
in ad53f62):

- finding #4: rewire the CPU floor to POST directly to the standalone
  Kokoro deploy unit (KOKORO_URL, default localhost:8004, #2024)
  instead of falling back to intent=narrate through the same
  Flute-Gateway/ultimate_tts stack that just failed -- a dead path.
- finding #5: register agent.graphiti.signed.v1's voice-cast consumer
  relationship + env vars (CHIT_SIGN_PUBLISH, KOKORO_URL, KOKORO_TOKEN,
  FLUTE_API_KEY, FLUTE_GATEWAY_URL) in the new
  pmoves/tools/VOICE_CAST_ON_SIGN.md (pmoves/configs/nats-subjects.md
  does not exist yet).
- finding #6: default NATS_URL to localhost (host-run daemon) instead
  of the Docker-internal `nats` hostname, which fails opaquely from a
  host shell; containers must now pass NATS_URL explicitly.
- finding #7 (optional): documented the winsound SND_ASYNC overlap
  risk as a nice-to-have rather than adding scope.
- cleanup nit: unlink the intermediate atempo *_tempo.wav after
  playback (delayed via estimated clip duration so it doesn't race
  the fire-and-forget player), leaving the primary cast WAV in place.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Shaela Bello <slbello@uncg.edu>
POWERFULMOVES added a commit that referenced this pull request Jul 15, 2026
…#2137)

* chore(submodules): promote Pmoves-cipher + pmoves-cipher-mcp gitlinks

Pmoves-cipher: 7525c00 → 1c9b2851 (origin/main)
- fix(build): official node-gyp disturl + pnpm 9 workspace (#6)
- feat(api): add /api/memory CRUD routes for cipher-mcp bridge (#5)
- feat(cipher): switch to Ollama backend + MCP capabilities (#3)
- feat(auth): add Bearer token authentication middleware
- fix(security): auth-gate cipher A2A discovery endpoint (#1)

pmoves-cipher-mcp: c2912967 → c633f436d (origin/PMOVES.AI-Edition-Hardened)
- sync: catch hardened branch up to PMOVES.AI in-tree state
  (nats_events, stdio bridge, hardening, observability)

Both commits verified on their origin remotes. Forward-only promotions.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2

* fix(model-suit): merge best of both GLM-5.2 suit versions + fill TBDs

The #2087 rebase took the KiloCode-flavored suit (4 harness mappings,
TBD architecture params). This merges both versions into the canonical
bespoke suit:

- Architecture: filled TBD → 744B+/40B+ MoE (from original #2104)
- Harness mappings: merged 8 total (both KiloCode's 4 + Crush's 4):
  large_scale_implementation, deep_debugging, blueprint_implementation,
  agentic_workflow, multi_step_reasoning, code_review,
  automated_research, refactoring
- CGP state vector: lower delta/Hz (flagship runs deeper, slower)
- fallback_to: glm-5.1 (was glm-5-turbo — 5.1 is closer in quality)
- Version bumped to 1.1.0

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
POWERFULMOVES added a commit that referenced this pull request Jul 17, 2026
Brainstormed design for the tractable first increment of the #5 governance
replacement: an equal-weight (member/unit/share knob) governor with roll-%
quorum and a modeled M-of-N committee finalize gate (crypto stubbed behind a
pluggable TallySigner). Drop-in sim/bridge replacement for the plutocratic
CoopGovernor, which stays intact as the sweep contrast. Stages 2–5 (real
threshold crypto, voter-card credentials, secret-ballot integration, paper
parity) are sequenced as later counsel-gated lanes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
Bite-sized, red-first plan for stage 1 of the #5 governance replacement:
roll+proposal+member-basis tally → castVote validation → basis contrast →
roll-% quorum+pass → k-of-n finalize gate + TallySigner. Full code per step,
CoopGovernor untouched, ends with PR + review + admin-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
Forward bump picking up PR #60: the equal-weight governor (member/unit/share
knob, roll-% quorum, k-of-n committee finalize gate) — stage 1 of the #5
governance replacement. CoopGovernor left intact as the sweep contrast.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
Committee-controlled eligibility roll: enrol/revoke each require k-of-n
committee approval (closes the enrollment chokepoint 08 flags), decoupled from
tokens, roll() feeds EqualWeightGovernor.setRoll(). Crypto stubbed behind the
same M-of-N gate pattern as stage 1. Stage 3 of the #5 arc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
…c note

Forward bump picking up PR #61: committee-controlled eligibility roll (M-of-N
enrol/revoke) — stage 3 of the #5 governance replacement. Spec updated to state
the committee-constitution trust assumption explicitly (review).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
Brainstormed design for the tractable first increment of the #5 governance
replacement: an equal-weight (member/unit/share knob) governor with roll-%
quorum and a modeled M-of-N committee finalize gate (crypto stubbed behind a
pluggable TallySigner). Drop-in sim/bridge replacement for the plutocratic
CoopGovernor, which stays intact as the sweep contrast. Stages 2–5 (real
threshold crypto, voter-card credentials, secret-ballot integration, paper
parity) are sequenced as later counsel-gated lanes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
Bite-sized, red-first plan for stage 1 of the #5 governance replacement:
roll+proposal+member-basis tally → castVote validation → basis contrast →
roll-% quorum+pass → k-of-n finalize gate + TallySigner. Full code per step,
CoopGovernor untouched, ends with PR + review + admin-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
Forward bump picking up PR #60: the equal-weight governor (member/unit/share
knob, roll-% quorum, k-of-n committee finalize gate) — stage 1 of the #5
governance replacement. CoopGovernor left intact as the sweep contrast.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
Committee-controlled eligibility roll: enrol/revoke each require k-of-n
committee approval (closes the enrollment chokepoint 08 flags), decoupled from
tokens, roll() feeds EqualWeightGovernor.setRoll(). Crypto stubbed behind the
same M-of-N gate pattern as stage 1. Stage 3 of the #5 arc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
…c note

Forward bump picking up PR #61: committee-controlled eligibility roll (M-of-N
enrol/revoke) — stage 3 of the #5 governance replacement. Spec updated to state
the committee-constitution trust assumption explicitly (review).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 18, 2026
…ign a contested ballot (#2154)

* docs(fordham): ballot prior art + A2UI reconciliation — HMAC cannot sign a contested ballot

The pilot package plans to receipt resident votes with sign_cgp() -- symmetric
HMAC (chit_security.py:91). Whoever holds the key can forge any ballot and any
tally, and the operator holds the key. For a contested governance vote, where
the operator's neutrality is itself the question, that is disqualifying.

It also defeats the record-keeping purpose: an artifact its own custodian can
forge carries little evidentiary weight. Integrity against outsiders and
verifiability against the operator are different properties; this needs the
second one.

Fix: Ed25519 -- and we already wrote it. PMOVES-ClawZ/ui/src/ui/
device-identity.ts on @noble/ed25519 3.1.0 already does keypair +
SHA-256-fingerprint-as-id + persistence. Port that pattern; don't hand-roll
crypto. (My first draft recorded "no Ed25519 anywhere in the repo" -- a survey
result I hadn't checked. Wrong. The doc flags the error, because "we already
built this and forgot" is the failure mode it exists to stop.)

Also lands what neither lane had: voting-systems prior art. Repo-wide greps
returned Benaloh 0 files, ElectionGuard 0, "coercion resistance" 0, Ostrom 0.
Every design decision now tracks to a citation (Helios, Delaune/Kremer/Ryan,
Juels/Catalano/Jakobsson, BeleniosRF, Estonian revoting, NY BCL 602).

Findings:

- Two lanes built the same thing and contradict each other on voting basis --
  the decision this package's own README calls most consequential. The pilot
  lane is the better work; A2UI pm-ballot was built without reading it.
- Helios -- the reference system -- scopes itself to LOW-COERCION environments.
  A contested cooperative recall is not one.
- Receipt-freeness: #2153's nonce gives the voter a durable proof of their own
  vote, which a coercer can simply demand. Estonia time-limits verification
  (~30min) precisely because a durable receipt IS the coercion instrument.
- status:"superseded" defeats revoting -- the anti-coercion mechanism only works
  if the ballot count stays secret. That is the documented Estonian eID-log
  leak, reproduced by design.
- Petition and secret ballot are opposite instruments and cannot be one
  component. US labor law already encodes the split (authorization cards vs
  NLRB election). A provable ballot is a validity risk: counsel argues
  procedure, not merits.
- NY practice: the managing agent is often the inspector of election. An
  inspector drawn from the incumbent side is structurally conflicted, whatever
  the facts of a given building -- and no amount of cryptography fixes a
  conflicted tabulator.
- Research integrity: the "~500 vs ~750 tokens" collusion finding in
  articles_long.md is fabricated -- no simulation exists. The QV formula and the
  DAO constitution's quorum numbers are unsourced. Counter-example and standard
  to copy: ECONOMIC_MODEL_VALIDATION_REPORT.md (real bibliography, 34 tests,
  honest about its limits).

Corrects two lines in the existing package: "one signing key underwrites both
trust surfaces" holds for agent trails, fails for ballots; and the "ballot is
just another CGP payload" reduction is what carries the HMAC flaw.

Adds 5 items to the Legal Review Register and 3 Open Operator Decisions.

Buildable today with no election-law exposure: the bylaws corpus, on the real
pdf-ingest -> extract-worker -> Qdrant/Meili -> hi-rag-gateway-v2 chain.

Note on framing: this repo squash-merges using COMMIT_MESSAGES, so commit text
lands on main. Threats are described structurally here; no party is named.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(pr): address all CodeRabbit + Codex review comments on #2154

Review fixes:
- amd-voice.yml: reset inherited NVIDIA device reservation (Codex P2),
  use compose service DNS for Ultimate TTS URL instead of host.docker.internal
  (Codex P2)
- ballot prior-art doc: distinguish Ed25519 authentication from ballot
  secrecy, add key enrollment/revocation requirements (CR Major);
  make repo-wide grep claim reproducible with exact commands + revision
  (CR Minor); align pipeline status wording with §8 MODELED (CR Minor)
- mcp_inventory.json + test_mcp_config_generator.py: update cipher SSE
  path from /mcp/sse to /api/mcp/sse to match actual endpoint (CR)

Infrastructure fixes (session convergence):
- docker-compose.yml: cipher-api Ollama URL → host.docker.internal +
  extra_hosts for GPU passthrough
- crush-env.sh: new env resolver script for tier file ${VAR} chain resolution
- crush-pmoves: source crush-env.sh before/after bootstrap
- pmoves-mini: use .venv-pmoves Python (typer/PyYAML available)

All 17 MCP config generator tests pass.

* fix(crush-env): use BASH_SOURCE[0] directly for sourced path resolution

The ${1:-...} fallback incorrectly picked up the caller's first
positional argument when sourced. BASH_SOURCE[0] always resolves
to the script's own path, which is the correct behavior for source.

* docs(fordham): voter-identity key-custody + token-structure refresh decision records

Two decision records extending the Fordham decision-record lane (07):

08-voter-identity-key-custody.md — decides how a resident's identity/key works
for a contested ballot. An adversarial review inverted the intuitive "resident
signs their vote" design: signing a choice is a coercion receipt, WebAuthn-primary
disenfranchises an elderly electorate, and operator-run enrollment recreates
forgeability. Corrected architecture: residents authenticate eligibility (they do
not sign their choice); an election committee threshold-signs the tally (no single
party can forge); a paper ballot is a first-class equal path; the eligibility
credential is decoupled from Archon minting and the token structure. Generalizes to
a two-mode primitive (adversarial/secret vs consensual/attributable) with a
mode-separation invariant.

TOKEN_STRUCTURE_REFRESH.md — the incentive engine beneath the consensual mode.
Current structure carries a plutocratic on-chain layer (stake-locked voting power,
freely-transferable token) contradicting a fair-but-unwired off-chain attribution
layer (Dirichlet, everyone non-zero). Refresh direction: standing from real, agreed,
kept commitments — not capital held/locked/traded. Concrete diffs: sever governance
power from stake, make credit soul-bound, and wire distributeWeekly() to the
existing Dirichlet weights instead of a Gaussian draw. Anti-extractive,
anti-rent-seeking, anti-money-changing, anti-speculative by construction.

Both DRAFT, REQUIRES LEGAL REVIEW (securities question counsel-gated).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(cataclysm): crystallize token-cooperative spec into the crosslinks bridge

Refreshes the stale (2026-03-11) vision↔implementation bridge via a 9-agent
fan-out reconciling CATACLYSM_STUDIOS_INC/ (L1–L5) against built code.

Headline finding: there is no single token trinity — there are two competing
designs. The DOCUMENTED trinity ($CAT governance / $WORK reputation SBT / $CRED
spend credit) has zero code; the BUILT design is a dual-token FoodUSD+GroToken
core (the design the DAO docs claim to supersede) plus mechanics + off-chain
Dirichlet/commitment layer.

Decision (Path A): built FoodUSD+GroToken is canonical for the sim/utility layer
now; $CAT/$WORK/$CRED is the target governance-layer redesign. Adds the built⇄
documented mapping, spec⇄code gap matrix, 9 contradictions, binding boundaries,
and 10 open decisions. Records the coordinator Dirichlet wire as done (PR #55).

DRAFT — every clause touching a binding vote or token-as-investment is
counsel-gated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(submodule): bump PMOVES-ToKenism-Multi to pick up the token-refresh chain

Forward bump 84b1620 -> d41bd8e on PMOVES.AI-Edition-Hardened, landing the full
anti-extractive token-structure refresh + policy-variable weave-in:
  #53 distributeByAttribution (Dirichlet distribution)
  #54 CommitmentModel (commitment-first attribution)
  #55 coordinator wire — Gaussian retired from the sim flow
  #56 policy variables (contributionMeasure, soulbound)
  #57 scenario-sweep harness (Gini/concentration/D12 per policy)
  #58 concentration cap (maxConcentration)
  #59 FoodUSD vendor-lock (toward $CRED)

Each PR independently code-reviewed and TDD-green (390 tests). Implements the
directions in pmoves/docs/architecture/TOKEN_STRUCTURE_REFRESH.md and the open
decisions parameterized in pmoves/docs/CATACLYSM_CROSSLINKS.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(cataclysm): mark parameterized open decisions + policy-knob library

Round-2 weave-in landed (submodule #53#59, gitlink bumped): the sweepable open
decisions are now testable config knobs measured by the scenario-sweep harness,
not pre-decided. Marks #4 (soulbound), #6 (concentration cap), #7 (FoodUSD
vendor-lock) as PARAMETERIZED; adds a policy-variable table with measured Gini/
concentration effects; notes LoyaltyPoints/RewardsPool (#2) as the remaining
dedicated increment. Distribution is now commitment-first + Dirichlet (Gaussian
retired). DRAFT — counsel-gated where member-facing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(spec): EqualWeightGovernor design (governance replacement, stage 1)

Brainstormed design for the tractable first increment of the #5 governance
replacement: an equal-weight (member/unit/share knob) governor with roll-%
quorum and a modeled M-of-N committee finalize gate (crypto stubbed behind a
pluggable TallySigner). Drop-in sim/bridge replacement for the plutocratic
CoopGovernor, which stays intact as the sweep contrast. Stages 2–5 (real
threshold crypto, voter-card credentials, secret-ballot integration, paper
parity) are sequenced as later counsel-gated lanes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(plan): EqualWeightGovernor implementation plan (5 TDD tasks)

Bite-sized, red-first plan for stage 1 of the #5 governance replacement:
roll+proposal+member-basis tally → castVote validation → basis contrast →
roll-% quorum+pass → k-of-n finalize gate + TallySigner. Full code per step,
CoopGovernor untouched, ends with PR + review + admin-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(ci): regenerate agents.yml overlay to clear compose drift

* chore(submodule): bump PMOVES-ToKenism-Multi — EqualWeightGovernor (#60)

Forward bump picking up PR #60: the equal-weight governor (member/unit/share
knob, roll-% quorum, k-of-n committee finalize gate) — stage 1 of the #5
governance replacement. CoopGovernor left intact as the sweep contrast.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(spec): MemberRegistry design (governance replacement, stage 3)

Committee-controlled eligibility roll: enrol/revoke each require k-of-n
committee approval (closes the enrollment chokepoint 08 flags), decoupled from
tokens, roll() feeds EqualWeightGovernor.setRoll(). Crypto stubbed behind the
same M-of-N gate pattern as stage 1. Stage 3 of the #5 arc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(plan): MemberRegistry implementation plan (3 TDD tasks)

Enrol with k-of-n gate + config validation → revoke + active-only roll() →
integration proof (roll drives the governor). Full code per step, imports
EligibleMember from stage 1, no existing model modified.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(submodule): bump — MemberRegistry (#61) + committee-genesis spec note

Forward bump picking up PR #61: committee-controlled eligibility roll (M-of-N
enrol/revoke) — stage 3 of the #5 governance replacement. Spec updated to state
the committee-constitution trust assumption explicitly (review).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(gov): stage-2 Ed25519 multisig TallySigner design spec

Real third-party-verifiable committee signature replacing MockThresholdSigner
behind the same TallySigner interface. k-of-n Ed25519 multisig (not FROST —
accountability is a feature at the tally layer); loose committee keyring;
keys injected (custody documented, not coded); float-excluded netstring
preimage shared by signer + verifier; verifyTallyAttestation is the
third-party informing surface (public keys only). Honors fordham-hill/08
('replaces single-operator HMAC') and the inform-not-decide north star.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Jul 24, 2026
…2204)

The 2026-04-01 known-issue note claimed Pmoves-cipher lacks /api/memory
routes. Operator flagged it stale and live verification agrees: fork
PR #5 (2026-07-14 wave, with the Qdrant embedding sidecar, BM25+dense
RRF hybrid search, and Ollama fallback) implemented the CRUD routes;
the live API returns 401 (auth required), not 404. Note updated to
point callers at the API key instead of assuming the routes are absent.

Co-authored-by: Shaela Bello <slbello@uncg.edu>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Aug 2, 2026
P1 #1 (wire the gate): provenance_gate.py is now importable and wired
into geometry_bridge.encode_packet (accepts voice_provenance meta) and
_publish_chit_voice_event (accepts + forwards voice_provenance_meta).
The gate is designed to be called by the cloned-voice synthesis path
(S8) which does not exist yet — this PR delivers the gate + CGP plumbing,
S8 will invoke it at the synthesis call site.

P1 #2 (consent privacy): RLS read policy no longer exposes provenance
rows for public voice profiles. Removed is_public from the SELECT
policy — only owner and explicit grantee can read consent/provenance.
Removed anon SELECT grant on the table.

P1 #3 (blank artifact): DB constraint now uses
NULLIF(btrim(consent_artifact_uri), '') IS NOT NULL.
Python gate also validates non-blank artifact_uri.

P1 #4 (evaluate all sources): Gate now iterates ALL active provenance
records. If any source fails its rights check (CHARACTER_OWNED without
context, CONSENTED with blank artifact), synthesis is rejected.

P2 #5 (nullable unique): UNIQUE constraint now uses NULLS NOT DISTINCT
so NULL source_url/timestamp values collide correctly.

All fixes unit-tested: blank artifact rejected, multi-row blend with
mixed rights correctly evaluates all sources, CHARACTER_OWNED with
context passes.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
POWERFULMOVES added a commit that referenced this pull request Aug 2, 2026
…ces (#2348)

* feat(voice): S5 provenance gate — rights/consent model for cloned voices

Implements the provenance gate from the voice agents design spec §8.
Every cloned-voice synthesis must pass this gate before audio generation.

- voice_cloning_provenance table: full rights/consent record per voice
  profile (source_type, rights_basis, consent_method, consent_artifact_uri,
  capturer_identity, attribution). RLS mirrors voice_profiles Q9 model.
  DB constraint enforces CONSENTED/LICENSED require artifact_uri.
- provenance_gate.py: Python gate logic with 5 checks:
  (1) VOICE_CLONING_ENABLED env gate (default false)
  (2) active provenance record must exist
  (3) CHARACTER_OWNED requires active character context
  (4) CONSENTED/LICENSED require artifact (enforced at DB + app layer)
  (5) is_active=false (revoked) records ignored
- build_cgp_meta(): returns voice_provenance block for CHIT CGP meta
  attribution injection (§8 requirement: cloned-voice synthesis injects
  minimal provenance into the geometry bus)

S5 was blocked on S1 (now landed) and §10 Q5/Q8 (both resolved).
Unblocked and unclaimed per AGNOTE4482PHI.t1.md orchestration map.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2

* fix(voice-s5): address all 4 P1 + 1 P2 review findings

P1 #1 (wire the gate): provenance_gate.py is now importable and wired
into geometry_bridge.encode_packet (accepts voice_provenance meta) and
_publish_chit_voice_event (accepts + forwards voice_provenance_meta).
The gate is designed to be called by the cloned-voice synthesis path
(S8) which does not exist yet — this PR delivers the gate + CGP plumbing,
S8 will invoke it at the synthesis call site.

P1 #2 (consent privacy): RLS read policy no longer exposes provenance
rows for public voice profiles. Removed is_public from the SELECT
policy — only owner and explicit grantee can read consent/provenance.
Removed anon SELECT grant on the table.

P1 #3 (blank artifact): DB constraint now uses
NULLIF(btrim(consent_artifact_uri), '') IS NOT NULL.
Python gate also validates non-blank artifact_uri.

P1 #4 (evaluate all sources): Gate now iterates ALL active provenance
records. If any source fails its rights check (CHARACTER_OWNED without
context, CONSENTED with blank artifact), synthesis is rejected.

P2 #5 (nullable unique): UNIQUE constraint now uses NULLS NOT DISTINCT
so NULL source_url/timestamp values collide correctly.

All fixes unit-tested: blank artifact rejected, multi-row blend with
mixed rights correctly evaluates all sources, CHARACTER_OWNED with
context passes.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
POWERFULMOVES added a commit that referenced this pull request Aug 16, 2026
…st contact

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Aug 16, 2026
… wrong — plus the four silent handlers they led to (#2572)

* docs(audit): six instruments that reported confidently and were wrong

Joins the existing audit lane (#2522 ruleset exposure, #2525 CI enforcement,
#2527 reproducibility) rather than opening a new one.

Six checks on B850 reported a confident result that did not match reality — a
0-byte exporter behind 200 OK, a launcher that WARNed and exec'd anyway, a
submodule audit measuring branch NAME instead of membership, a dmesg evicted by a
failing USB keyboard, a health checker that printed 'Health: 0.0%' for a bus it
never contacted, and this auditor reading an AttributeError as an ImportError and
writing it into a Makefile comment as fact.

Two shapes needing different remedies: three are mechanizable (a surface returning
success while the payload is absent/stale/malformed — assert content, not status),
three are not (a wrong question, unrelated noise destroying evidence, a misread).

Deliberately does NOT restate the verification discipline. .claude/agents/verifier.md
already specifies it — 'evidence before assertions ... capture verbatim ... state
UNVERIFIED (environment) rather than approximating' — and predates this session.
The documented gap is INVOCATION: that agent was invoked zero times during a session
in which it would have caught finding #6 immediately.

Records the mechanical traps, which are the genuinely new material: $() strips
trailing newlines (bit four times in one evening), nats-py connect_timeout does not
bound DNS, % and ${} in a systemd ExecStart are expanded by systemd, submodule branch
name != membership and recorded gitlink != working tree.

Notes that #2525's merge-gate finding has already been repaired (pytest_ratchet runs
all 264 test files; the gate exit 1s) — verified before relying on it for merges. The
audit lane is driving fixes ahead of its own PRs merging, which argues for landing it.

Proposes the #2527 package as a calibration fixture: #2525 had to hand-roll a
deliberately failing test to prove a check COULD fail; a frozen, hash-manifested,
network-isolated package with six deterministic checks of known outcome is the
standing form of that — a target whose answer is known, which every instrument in
the table lacked.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(instruments): four silent handlers that reported success outward

An AST sweep for finding #7's cause (soft-import + broad except returning a
plausible default) hit 157 sites. That number is itself the finding: torch,
faiss, sentence_transformers, numpy, tqdm, rich and psutil guards are all
CORRECT — the feature degrades and the caller is told. Narrowing to handlers
that are silent (no log, no raise, no warn) gave 60; to those in a path that
reports outward, 4.

The antipattern is not "a broad except on an import". It is a silent handler
in a path that reports outward.

Fixed (logging only — no behaviour or contract change, best-effort delivery
stays best-effort):

  sign_trail.py:77          substituted the whole agent identity in silence;
                            now warns to stderr naming the reason. It already
                            warned about a missing ALTER twenty lines below —
                            it could report a missing persona but not a
                            missing person.
  geometry.py:166,583       dropped every live subscriber and returned
                            {"ok": true}. Eight lines up, the persist logs and
                            raises HTTPException(500). Two disciplines, one
                            function.
  hf-mcp-server:853         hf.model.gguf.converted.v1 never published while
                            the caller was told everything worked.

Left alone deliberately, as counterexamples of correct degradation:
  hf-mcp-server:542         stamps "source":"catalog" vs "registry"
  chit_security.py:13       sets an explicit _CRYPTO_OK = False
  common/__init__.py:41     optional exports fail loudly at the call site

Verified: pmoves/tests/test_sign_trail.py 2 passed; unregistered agent-id now
warns, registered b850-claude still resolves to glyph U+232C / #DC2626 with no
warning; detector re-run shows only the two correct sites remaining.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(geometry-bus-health): report the actual failure, and stop lying in JSON

Running the merged checker on B850 for the first time exposed two gaps in the
NOT MEASURED work itself:

1. The JSON branch still emitted "health_pct": 0.0 when the bus was never
   contacted. The human-readable branch had been fixed to refuse an unmeasured
   percentage; any dashboard consuming --json kept receiving the exact false
   negative. Now null, with an explicit "measured" flag. Fixed the instance,
   not the class — the same error this audit documents.

2. The failure report offered a list of GUESSES and no facts. The real cause
   was 'Authorization Violation' (the server requires credentials; this tool
   deliberately ships no credential-bearing default), but nats-py surfaces that
   through error_cb and keeps retrying, so the only exception reaching the
   caller was TimeoutError. The report therefore said "timed out" — reading as
   a network fault and sending the operator to check host and port, which were
   both already correct. An error_cb now captures what the server actually
   said, and the report leads with it before any guesses.

Verified:
  no creds -> measured=False, health_pct=null,
              error="timed out after 5s connecting to nats://localhost:4222
                     — last server error: Error: nats: 'Authorization Violation'"
  connected -> health_pct=4.2, error=null, no NOT MEASURED banner (synthetic
              BusHealth; success path formatting unchanged)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs(audit): postscript — the fix for #5 was confidently wrong on first contact

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Aug 21, 2026
… an upstream (#2657)

* fix(compose): p7 joins the ui profile so openroom's /api/p7 proxy has an upstream

The OpenRoom nginx config proxies /api/p7 to the canonical p7 service
(:8120), but p7 only carried the agents/p7 profiles while `make
up-openroom` runs --profile ui — so the Known Road started openroom with
no upstream and every session call would 502. Adds "ui" to p7's profile
list. Pairs with PMOVES-OpenRoom fork PR #5 (fixes the upstream name/port
mismatch in nginx on the fork side).

Generated with Crush

* fix(make): up-openroom brings up its p7 upstream too

`up -d openroom` alone never started p7 even with p7 in the ui profile —
compose only creates named services (no depends_on link). Name p7
explicitly so the /api/p7 proxy has its upstream on the Known Road.

Generated with Crush

* docs(compose): say which path the p7 ui profile actually carries

The comment justified the profile addition with `make up-openroom`, but that is
the one path it does not carry. Naming a service limits `up` to that service and
its declared dependencies, and openroom has no `depends_on: p7` — which is why
the companion commit names p7 outright in the target.

What the profile membership does carry is the overlay path: `up-ui-new` runs
`--profile ui up -d` with no service named, so profile membership is the only
thing that starts p7 there. Both halves are load-bearing, on different paths;
neither is redundant.

Also records that `up-ui` is unaffected, since it names pmoves-ui — worth
stating because widening a shared profile invites exactly that question.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Agent Zero <agent.zero@pmoves.ai>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant