Skip to content

Local deploy timing plus CauseStarter bridge and contact work - #132

Merged
AdamSpitz merged 12 commits into
devfrom
feature/local-deploy-timing
Aug 19, 2026
Merged

Local deploy timing plus CauseStarter bridge and contact work#132
AdamSpitz merged 12 commits into
devfrom
feature/local-deploy-timing

Conversation

@AdamSpitz

Copy link
Copy Markdown
Owner

Summary

Stacks several unreleased dev commits: elapsed-time summaries on local wipe/start/seed, start and fund the implication-attester host locally, CauseStarter bridge-cluster UX (own /edit URL, visitor-visible inbound bridges, one-shot wording help, stand-in parents), organizer contact as pull (ADR 0011), and smaller UI polish (content-funding titles, layout-neutral trust refresh, human names on giving options).

Review

Branch review vs origin/dev found 0 bugs, 2 suggestions, 1 nit (stale metadata comment, empty bullets vs 1–N error text, design-narrating comments in CauseBridgesSection). None treated as merge blockers.

Test plan

  • ./scripts/data.sh --wipe / services.sh --start / seed print elapsed-time summaries
  • Local start brings up service-host-attesters and funds generated signer wallets
  • CauseStarter: create/edit a bridge cluster, inbound citations from another cause, wording-help verbs
  • Organizer contact is pull-only (no message-hub UI)

AdamSpitz and others added 12 commits August 19, 2026 13:22
Also let stop-wipe-restart --seed proceed after --start writes Hardhat trust events.
Organizers can copy a constrained brief for their own assistant or call
cause-assist draft/critique verbs; the draft stays the memory and we do
not host a mediation chat.
The full Alert shoved page content while Subjectiv recomputed, then vanished. Overlay a small spinner with the same explanation as a tooltip and aria-label instead.
Content-funding rows were omitted from metadata fetch, so the card heading
fell back to a truncated address even when the project page had a name.
Load metadata for every displayed row, use the channel label if needed,
and ellipsize long titles.
Editing was a mode flag on the cause page, so the browser's back button
could not leave it. Viewing is now /cause/... and editing /cause/.../edit,
with the toggle navigating instead of setting state. New drafts open at the
edit URL, and publishing a roster stays in the editor.

The bridge surface moves under one Bridges heading and stops inlining other
parties' statements into an already long page. Each cluster is a compact row
linking to its own page; an attached mediator is a row with an opt-in toggle
that reads and writes the trusted-nudger store directly, replacing the
Settings deep link and the per-load /anchors fetch. What a mediator proposes
now lives on /cause/.../mediator (BridgeDisplayBlock, full triples) alongside
the attachment form, which is one quiet link deeper since almost no cause
runs its own bridge-creator instance. The visitor's page shows the same rows,
published clusters only, and renders nothing when there are none.

The bridge editor's parent picker takes a pasted cause link. There is no
directory to search (ADR 0008), so the link another organizer circulated is
how one cause reaches another; parseCauseLink accepts a full URL, a
hash-routed URL, a bare path, or 0xowner/slug, tolerates @versionCid and
trailing page segments, and refuses anything ambiguous rather than guessing
at an owner.

Also: useMediatorAnchors claimed to be "showing the bundled reference set"
on a failed fetch even for callers that have no fallback set, such as
CauseStarter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Bridges section only rendered for a cause's own organizer, and only in
edit mode, so the feature was invisible to everyone else. It now always
renders — header, "No bridges yet.", and a Create a bridge button — because
authoring a bridge is not an owner privilege: the cluster publishes under the
mediator's own key, quoting the cause as a natural parent. A visitor note says
so, and is honest that telling the organizer is currently on them. The
attached-mediator row and the standalone mediator-service link stay
organizer-only.

Creating a bridge from a cause page now seeds natural parent 1 with that
cause and auto-loads its roster once, since the assist verbs refuse to run
without parent planks. The editor's "Loaded: <title>" line now only claims a
load once planks are present — the title can arrive from the URL, so it was
no longer evidence the fetch succeeded.

Pair dropdowns label each option with its side, which two parents' worth of
similar truncated sentences badly needed.

Filed two inbox items: how to let organizers publish contact info (ENS is
already handled by ui/src/shared AddressDisplay and AddressPicker, which
CauseStarter does not yet import), and how a mediator sets up a side that has
no cause of its own yet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
service-host-attesters was fully defined in compose, registered in the service
host, and already proxied by both Vite and nginx — it was just never started,
so the bridge-cluster editor's "submit pairs to attester" step failed against
nothing. Added it to services.sh, after the env files are sourced since it
needs IMPLICATIONS_CONTRACT_ADDRESS from deployments/localhost.env.

Two things stopped that from being enough:

The bundle would not boot. content-attester requires
ALIGNMENT_TOPIC_STATEMENT_CID, which is a published-statement CID rather than
a deploy artifact, so a fresh local chain has none — and because the host
validates every service at startup, that took the implication-attester down
with it. It now defaults off locally and stays overridable.

The attester had no gas. Compose falls back to prefunded Hardhat keys, but it
also auto-loads the root .env, and since generate-wallets.mjs ran that file
holds generated keys with no local balance. The service booted "degraded" and
would have failed every on-chain write; the same applies to
christian-bridge-creator and content-attester, so this was likely already
biting quietly. fund-local-service-wallets.mjs tops up any configured signer
below 1 ETH from Hardhat account #0. It is idempotent and refuses to run off
chain 31337.

Verified: healthy at :3006 with a funded signer, 200 through CauseStarter's
/api/implication-attester proxy, and a clean repeat run of services.sh
--start. Not verified: that a real pair submission settles end to end — the
x402 round-trip plus the on-chain write need two published parent causes,
which the seed data does not create.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Content-funding receipts use keccak token IDs; the project page was printing
those as "Giving option #<uint256>". Prefer metadata names and content slugs.
ADR 0011: Commonality never delivers messages. CauseStarter shows ENS/Twitter
via AddressDisplay, an optional roster contactUrl, and inbound bridge citations
this client already knows.
Bridge clusters no longer require a pasted parent cause: the editor can author a labeled stand-in sliver, skip the modified hop, and pair parent planks to the bridge. cause-assist gets draft-stand-in-sliver; local seed publishes a secular-conservative cause.
Align the cause-assist error text with empty bullets being valid, load-metadata
comment with displayed rows, and drop design-narrating comments on the bridges
section.

@AdamSpitz AdamSpitz left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review receipt.

Prior branch review found 0 bugs, 2 suggestions, 1 nit. All three are fixed on this head: bullets error text is 0–N, AlignedProjectsList comment matches displayed-row metadata load, CauseBridgesSection comments trimmed.

Reviewed-with: grok
Reviewed-files: 3
Reviewed-commit: 1b6dff1

@AdamSpitz
AdamSpitz merged commit 88ddc9c into dev Aug 19, 2026
3 checks passed
@AdamSpitz
AdamSpitz deleted the feature/local-deploy-timing branch August 19, 2026 22:18
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