Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
140 commits
Select commit Hold shift + click to select a range
6be48ae
Ubiquitous language glossary plus CauseStarter organizer, trust, and …
AdamSpitz Aug 14, 2026
26e171f
Add cause-board project start, earmark copy, and content board.
AdamSpitz Aug 14, 2026
62fdfce
Keep CauseStarter lists local and bookmark published causes on-chain.
AdamSpitz Aug 14, 2026
849a239
Add CauseStarter bootstrap trust service
AdamSpitz Aug 14, 2026
e74f2a8
Track remaining alignment-trust and CauseStarter backlog.
AdamSpitz Aug 15, 2026
f2fd1b6
Tidy CauseStarter cause-page labels and help.
AdamSpitz Aug 15, 2026
24d43ac
Wire CauseStarter alignment trust on testnet
AdamSpitz Aug 15, 2026
2684c9c
Index Subjectiv trust events for CauseStarter
AdamSpitz Aug 15, 2026
57b384c
Minor UI tweaks.
AdamSpitz Aug 15, 2026
c7630f2
Paint cause pages before plank bodies finish loading.
AdamSpitz Aug 15, 2026
535eb96
Classify alignment bootstrap key as secret
AdamSpitz Aug 15, 2026
5549af4
Merge pull request #126 from AdamSpitz/feature/causestarter-board-aff…
AdamSpitz Aug 15, 2026
3fd79c7
Added a bit to the causestarter UI e2e test.
AdamSpitz Aug 15, 2026
36b7a98
Show founder-style cause-board tabs and funding progress.
AdamSpitz Aug 15, 2026
6367b07
Make Fully reimbursed mean success-vouched and paid back.
AdamSpitz Aug 15, 2026
52dbb21
Replace the cause share-path caption with a copy/share control.
AdamSpitz Aug 15, 2026
a23025f
Improving the coherent badge UI
AdamSpitz Aug 16, 2026
756ed74
Move cause-board help off the cause page.
AdamSpitz Aug 16, 2026
37c50e5
Show aligned content-funding contracts on cause boards.
AdamSpitz Aug 16, 2026
74ae896
Filter cause-board content contracts by trusted attesters.
AdamSpitz Aug 16, 2026
dd430b1
Seed mixed content alignment and a local-food cause roster.
AdamSpitz Aug 16, 2026
5966cc0
Tighten CauseStarter cause-page chrome around funding and nav.
AdamSpitz Aug 16, 2026
3023f23
Say sign/statement in CauseStarter and show both signer totals.
AdamSpitz Aug 16, 2026
d79b692
Load published statements that nobody has signed yet.
AdamSpitz Aug 16, 2026
8b9fc94
Shorten CauseStarter signer copy and follow system color mode.
AdamSpitz Aug 16, 2026
411b1ec
Calm the statement cause board and move filters to settings.
AdamSpitz Aug 16, 2026
fca41a5
Inline the fundable-projects dashboard on cause and statement pages.
AdamSpitz Aug 16, 2026
93c7881
Calm CauseStarter cause and statement pages.
AdamSpitz Aug 16, 2026
64701b0
Keep CauseStarter project lists painted on statement refresh.
AdamSpitz Aug 17, 2026
6dff5f9
Tighten cause-board layout and compact aligned project cards.
AdamSpitz Aug 17, 2026
aebfd44
Always seed the local-food plank on tiny and other sim sizes.
AdamSpitz Aug 17, 2026
8c8d32b
Add a cause-page leaderboard and seed Hardhat buys and pledges.
AdamSpitz Aug 17, 2026
87d5d14
Add project leaderboards and list monthly pledgers on cause boards.
AdamSpitz Aug 17, 2026
251b6bc
Removed already-done todos.
AdamSpitz Aug 17, 2026
b61f8a8
Seed prospective and materialized content-funding rounds.
AdamSpitz Aug 17, 2026
a5790d5
Show seed content contracts on CauseStarter cause boards.
AdamSpitz Aug 17, 2026
3c5bc8e
Fix content-funding dark-mode surfaces and add claim tooltips.
AdamSpitz Aug 17, 2026
c06bba1
Add project-page eyebrows and explained InfoChips.
AdamSpitz Aug 17, 2026
12ae6fb
Publish mediator identity so followers can subscribe.
AdamSpitz Aug 17, 2026
2482923
Note the CauseStarter mediator subscription gap in inbox.
AdamSpitz Aug 17, 2026
7c883da
Show subscribed mediators and nudges on CauseStarter home.
AdamSpitz Aug 17, 2026
06658ae
Seed a Christianity cause that exercises CauseStarter mediators.
AdamSpitz Aug 17, 2026
989a971
Start the Christianity mediator with the local Docker stack.
AdamSpitz Aug 17, 2026
b71aa0e
A couple of todos.
AdamSpitz Aug 17, 2026
fd151a2
Replace cause-wide sign-all with a selected-statements button.
AdamSpitz Aug 17, 2026
e23ddf9
Spec bridge causes as a human-authorable mediator presentation.
AdamSpitz Aug 17, 2026
4fb0710
Fix HashRouter-breaking board links and project merge keys.
AdamSpitz Aug 17, 2026
38bc53d
Include content-funding contracts in cause-board header metrics.
AdamSpitz Aug 18, 2026
ce81244
Require statement-shaped extras before synthesizing unsigned /stateme…
AdamSpitz Aug 18, 2026
45b2ad3
Apply CauseStarter starter-network filter to inlined CauseBoard.
AdamSpitz Aug 18, 2026
6d4631b
Merge pull request #127 from AdamSpitz/misc
AdamSpitz Aug 18, 2026
54b10e0
Add CauseStarter create/edit flow for bridge cause clusters.
AdamSpitz Aug 18, 2026
7d6f253
Let the bridge cluster editor pay the attester and publish nudges.
AdamSpitz Aug 18, 2026
ed735f3
Skip legacy UI IPFS builds on local start.
AdamSpitz Aug 18, 2026
6f95cd0
Speed up local seed publish and default to tiny.
AdamSpitz Aug 18, 2026
9868c50
Fix seed publish nonce and unused parent slots.
AdamSpitz Aug 18, 2026
ddb8e34
Merge pull request #128 from AdamSpitz/feature/bridge-causes
AdamSpitz Aug 18, 2026
3a41f66
Stop stale devices from resurrecting removed cause bookmarks (#129)
AdamSpitz Aug 18, 2026
9eec26d
Minor UI tweaks.
AdamSpitz Aug 18, 2026
e383871
Some refinement of our understanding of anchors.
AdamSpitz Aug 19, 2026
3dab6e6
Some thoughts on anchors.
AdamSpitz Aug 19, 2026
5a0df61
Add combinator statements as the graph form of a promoted view.
AdamSpitz Aug 19, 2026
23336d1
Fix combinator promotion display, operand checks, and statement links.
AdamSpitz Aug 19, 2026
5e5f1a7
Some fixes
AdamSpitz Aug 19, 2026
7471e34
Added some todos regarding a race in the overnight stuff
AdamSpitz Aug 19, 2026
5dc0c02
Updating the causestarter UI description a bit.
AdamSpitz Aug 19, 2026
65ae914
Fix broken suggester copy test and stale NoteIntent ABI.
AdamSpitz Aug 19, 2026
e7394da
Tie promoted anchors to their operands; guard operand reads.
AdamSpitz Aug 19, 2026
b65cbcc
Merge pull request #130 from AdamSpitz/misc
AdamSpitz Aug 19, 2026
96bbd32
Earmark conjunctive combinators from the funding page
AdamSpitz Aug 19, 2026
b159484
Do not block conjunction earmark on implication-attester payment
AdamSpitz Aug 19, 2026
7e84e8d
Align founder status blurb with conjunction-only mint path
AdamSpitz Aug 19, 2026
cd3660d
Merge pull request #131 from AdamSpitz/feature/conjunction-earmark
AdamSpitz Aug 19, 2026
8cd2cd2
Add elapsed-time summaries to local wipe, start, and seed.
AdamSpitz Aug 19, 2026
6d95599
Add one-shot wording help for human-authored bridge clusters.
AdamSpitz Aug 19, 2026
85ee28f
Replace trust-network refresh banners with a layout-neutral spinner.
AdamSpitz Aug 19, 2026
5fbc910
Show content-funding project titles on cause boards.
AdamSpitz Aug 19, 2026
e08d9f4
Give the cause editor its own URL and compact its bridge surface.
AdamSpitz Aug 19, 2026
01dea63
Make bridges visible to visitors and prefill the cause they came from.
AdamSpitz Aug 19, 2026
5923b58
Start the attester bundle locally, and fund the service signer wallets.
AdamSpitz Aug 19, 2026
08b9d4a
Show human names for giving options instead of hashed token IDs.
AdamSpitz Aug 19, 2026
a0aad42
Removed unnecessary "here's what I did" stuff.
AdamSpitz Aug 19, 2026
68891bb
Treat organizer contact as pull, not a message hub.
AdamSpitz Aug 19, 2026
4fc620b
Let mediators write a stand-in for the other camp.
AdamSpitz Aug 19, 2026
1b6dff1
Fix review nits on comments and stand-in bullets validation.
AdamSpitz Aug 19, 2026
88ddc9c
Merge pull request #132 from AdamSpitz/feature/local-deploy-timing
AdamSpitz Aug 19, 2026
08b90c0
CauseStarter: persist seeded bridge drafts, home Statements/Projects,…
AdamSpitz Aug 20, 2026
b32183c
Pare obsolete chats, dated reviews, and snapshot leftover docs (#134)
AdamSpitz Aug 20, 2026
c370956
Let people subscribe to a mediator address.
AdamSpitz Aug 21, 2026
8226927
Persist cluster authorship on LLM tick rosters.
AdamSpitz Aug 21, 2026
5ab04b5
Keep LLM cluster slugs valid after 64-char truncation.
AdamSpitz Aug 21, 2026
687d942
Merge pull request #135 from AdamSpitz/feature/mediator-is-an-address
AdamSpitz Aug 21, 2026
ed5cc4a
Serialize local-stack checks in deep cadence.
AdamSpitz Aug 20, 2026
5a745e2
Dump Anvil --state on Docker SIGTERM so restarts keep the chain.
AdamSpitz Aug 20, 2026
aa22b98
Assert tiny-seed CauseStarter refs in stack.fresh-seeded.
AdamSpitz Aug 20, 2026
61feb8b
Removed Tell things.
AdamSpitz Aug 20, 2026
b931822
Index ProjectCreated so CauseStarter can list created projects.
AdamSpitz Aug 20, 2026
20a498c
Removed an unnecessary todo.
AdamSpitz Aug 20, 2026
7a5ad4e
Match only real git commit/push/merge in the agent branch guard.
AdamSpitz Aug 21, 2026
7c88028
Merge pull request #136 from AdamSpitz/fix/serialize-cadence-and-proj…
AdamSpitz Aug 21, 2026
68da39a
CauseStarter as jobs + personal fundable-projects board (#137)
AdamSpitz Aug 24, 2026
e58f890
Tighten CauseStarter home lists and chips. (#138)
AdamSpitz Aug 24, 2026
6fa7b3f
Set CauseStarter tab title from domain branding (#139)
AdamSpitz Aug 25, 2026
b35c911
Doc tweaks. Still not great.
AdamSpitz Aug 25, 2026
4962327
Wrote something about why statements are the way they are.
AdamSpitz Aug 25, 2026
82ae2b3
Had AI flesh out the "why statements are peculiar" stuff.
AdamSpitz Aug 25, 2026
8b9c9c7
Seed a Christianity × secular-conservatism cluster with blessed triples.
AdamSpitz Aug 25, 2026
65486cf
Make tiny seed the Christian/secular cluster, with mediator nudges an…
AdamSpitz Aug 25, 2026
a22b382
Seed the Christian/secular CauseStarter bridge cluster under Hardhat #8.
AdamSpitz Aug 25, 2026
e4608e1
Fix prospective-round seed when the factory address has no bytecode.
AdamSpitz Aug 25, 2026
064caab
Fiddling with the seed statements, though I'm still not happy.
AdamSpitz Aug 25, 2026
9c2e17b
Added localhost contract manifest to .gitignore.
AdamSpitz Aug 25, 2026
2ed636a
Added env var.
AdamSpitz Aug 25, 2026
36f6e4d
Still working on the tiny seed data, but I'm realizing that this is t…
AdamSpitz Aug 25, 2026
6652355
Document implication-vs-nudge routing and wire it into writer checks.
AdamSpitz Aug 26, 2026
82a2d6f
Teach writers not to paste-glue triples, and catch that in critique.
AdamSpitz Aug 26, 2026
8834a46
Fix tiny-seed attesters, buys, and statement-guidance routing.
AdamSpitz Aug 26, 2026
1249d4a
Merge pull request #140 from AdamSpitz/misc
AdamSpitz Aug 26, 2026
0379602
Document how to generate viable simple-cause statements.
AdamSpitz Aug 27, 2026
44c5cdf
Copy exercise-1 simple causes into live seed; geo rollup still open.
AdamSpitz Aug 27, 2026
fa8d90f
Added a code base cleanup plan.
AdamSpitz Aug 27, 2026
4180d60
Added thoughts on belief implication, geographic containment, etc.
AdamSpitz Aug 27, 2026
06298dc
Clean up dead code surfaces
AdamSpitz Aug 27, 2026
2db9f78
Clean up ABI sync and indexer registration
AdamSpitz Aug 27, 2026
53972fb
Add geographic project inclusion rules
AdamSpitz Aug 27, 2026
3f90e24
Clean up duplicated constants and helpers
AdamSpitz Aug 27, 2026
eb3f653
Treat nested-place rollup as board inclusion, not implication.
AdamSpitz Aug 27, 2026
93f3128
Draft exercise-2 abortion triple; thicken modified-right after attester.
AdamSpitz Aug 27, 2026
f23016a
Switch OpenRouter services to DeepSeek V4 Flash.
AdamSpitz Aug 27, 2026
a2c34ee
Fold CauseStarter onto the shared UI runtime.
AdamSpitz Aug 27, 2026
2f03e38
Narrow SDK public utils and drop leftover GraphQL compile glue.
AdamSpitz Aug 27, 2026
339083d
Reject nested-place geography as belief implication.
AdamSpitz Aug 27, 2026
b2f6caa
Split SDK eventDecoder by subsystem with explicit ABIs.
AdamSpitz Aug 27, 2026
ca0dcb6
Split SDK query modules and read chain state via generated ABIs.
AdamSpitz Aug 27, 2026
442ad14
Extract bridge-cluster publish; drop the cleanup plan.
AdamSpitz Aug 27, 2026
275f15e
Keep unscoped rows visible on geographic boards.
AdamSpitz Aug 27, 2026
c69d599
Merge pull request #141 from AdamSpitz/statement-generation-process
AdamSpitz Aug 27, 2026
fdaa618
Paint combinator statement pages before operand IPFS reads finish.
AdamSpitz Aug 28, 2026
ecb312b
Guard conceptspace page loaders against stale writes after navigation
AdamSpitz Aug 28, 2026
4682db5
Sweep leftover CauseStarter package glue after ui/src/causestarter/ fold
AdamSpitz Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 15 additions & 17 deletions .claude/hooks/block-protected-branch.sh
Original file line number Diff line number Diff line change
@@ -1,30 +1,28 @@
#!/usr/bin/env bash
# Claude Code PreToolUse hook (Bash): stop an agent from committing/pushing
# directly on master or dev. This is the "graceful" layer — the .husky git
# hooks are the real enforcement (and fire for any tool, not just Claude).
# PreToolUse hook (Bash / Grok run_terminal_command): stop an agent from
# committing/pushing/merging directly on master or dev. This is the "graceful"
# layer — the .husky git hooks are the real enforcement (and fire for any tool).
#
# Exit 2 blocks the tool call and feeds stderr back to the model so it can
# self-correct by starting a feature branch.

set -euo pipefail

HOOK_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
MATCHER="$HOOK_DIR/git-mutating-subcommand.py"

if [ "${1:-}" = --self-test ]; then
exec python3 "$MATCHER" --self-test
fi

input=$(cat)
cmd=$(printf '%s' "$input" | sed -n 's/.*"command"[[:space:]]*:[[:space:]]*"\(.*\)/\1/p')

# Only care about git commit / push / merge as real subcommands.
# Pattern: git, optional intermediate tokens (e.g. -C path), then commit|push|merge
# as a whole token. The char after the subcommand must not be alnum/_/- so we do
# NOT match false friends: merge-base, merge-file, merge-tree, commit-tree.
# Example that must stay allowed: `git merge-base --is-ancestor origin/master origin/dev`
if ! printf '%s' "$cmd" | grep -Eq \
'(^|[^[:alnum:]_/-])git[[:space:]]+(.+[[:space:]])?(commit|push|merge)([^[:alnum:]_-]|$)'; then
# Honor the same escape hatch as the git hooks (also recognized inside the matcher).
if ! printf '%s' "$input" | python3 "$MATCHER"; then
exit 0
fi

# Honor the same escape hatch as the git hooks.
case "$cmd" in
*ALLOW_PROTECTED_COMMIT=1*) exit 0 ;;
esac

branch=$(git -C "${CLAUDE_PROJECT_DIR:-.}" symbolic-ref --short HEAD 2>/dev/null)
branch=$(git -C "${CLAUDE_PROJECT_DIR:-.}" symbolic-ref --short HEAD 2>/dev/null || true)
case "$branch" in
master|dev)
echo "Blocked: '$branch' is a protected branch. Do not commit/push/merge directly onto it." >&2
Expand Down
128 changes: 128 additions & 0 deletions .claude/hooks/git-mutating-subcommand.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
#!/usr/bin/env python3
"""Detect git commit/push/merge as real subcommands in a shell snippet.

Used by block-protected-branch.sh. First non-option token after `git` must be
exactly commit, push, or merge — not merge-base, and not the word "merge" in a
log message or tool description.
"""
from __future__ import annotations

import json
import re
import shlex
import sys

MUTATING = {"commit", "push", "merge"}


def extract_command(raw: str) -> str:
raw = raw.strip()
if not raw:
return ""
try:
data = json.loads(raw)
except json.JSONDecodeError:
return raw
if not isinstance(data, dict):
return ""
cmd = data.get("command")
if isinstance(cmd, str) and cmd:
return cmd
tool_input = data.get("tool_input")
if isinstance(tool_input, dict):
inner = tool_input.get("command")
if isinstance(inner, str):
return inner
return ""


def _statements(cmd: str) -> list[str]:
return re.split(r"[;\n]|\|\||&&|\|", cmd)


def _first_git_subcommand(argv: list[str]) -> tuple[str | None, bool]:
i = 0
while i < len(argv) and re.match(r"^[A-Za-z_][A-Za-z0-9_]*=", argv[i]):
i += 1
if i >= len(argv):
return None, False
if not re.search(r"(^|/)git$", argv[i]):
return None, False
allow = any(re.match(r"ALLOW_PROTECTED_COMMIT=", a) for a in argv[: i + 1])
i += 1
while i < len(argv):
a = argv[i]
if a == "--":
i += 1
break
if a in ("-C", "-c"):
i += 2
continue
if a.startswith("-"):
i += 1
continue
return a, allow
if i < len(argv):
return argv[i], allow
return None, allow


def is_mutating_git(cmd: str) -> bool:
for stmt in _statements(cmd):
stmt = stmt.strip()
if not stmt:
continue
try:
argv = shlex.split(stmt)
except ValueError:
argv = stmt.split()
sub, allow = _first_git_subcommand(argv)
if sub in MUTATING and not allow:
return True
return False


def self_test() -> int:
samples = [
("git log --oneline", False),
("git merge-base --is-ancestor a b", False),
("/usr/bin/git merge-base --is-ancestor a b", False),
("git status", False),
("git switch -c feature/x", False),
("git merge other", True),
("git commit -m msg", True),
("git push origin HEAD", True),
("git -C /tmp merge other", True),
("git -C /tmp merge-base a b", False),
('git log; echo "merge status"', False),
("ALLOW_PROTECTED_COMMIT=1 git commit -m x", False),
]
failed = 0
for sample, expect in samples:
got = is_mutating_git(sample)
if got != expect:
print(f"FAIL {sample!r}: got {got}, want {expect}", file=sys.stderr)
failed += 1
payload = json.dumps({
"command": "git log --oneline",
"description": "Inspect serialize branch history and merge status",
})
if is_mutating_git(extract_command(payload)):
print("FAIL json description containing 'merge' blocked git log", file=sys.stderr)
failed += 1
if failed:
return 1
print(f"{len(samples) + 1} checks passed")
return 0


def main(argv: list[str]) -> int:
if argv[1:] == ["--self-test"]:
return self_test()
raw = sys.stdin.read()
cmd = extract_command(raw)
return 0 if is_mutating_git(cmd) else 1


if __name__ == "__main__":
raise SystemExit(main(sys.argv))
15 changes: 14 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
#
# Local dev should use ./scripts/services.sh --start (not raw docker compose),
# followed by ./scripts/data.sh --seed or ./scripts/data.sh --seed=demo.
#
# Temporary: local start publishes only the CauseStarter IPFS bundle.
# Restore all eight legacy UIs + CauseStarter with:
# LOCAL_UI_DOMAINS=all ./scripts/services.sh --start
# LOCAL_UI_DOMAINS=causestarter
# LOCAL_UI_DOMAINS=all

# =============================================================================
# Generated private secrets (set in .env.secrets — never commit)
Expand All @@ -23,6 +29,7 @@
# IMPLICATION_ATTESTER_PRIVATE_KEY=0x...
# CONTENT_ATTESTER_PRIVATE_KEY=0x...
# CAUSE_ASSIST_COHERENCE_ATTESTER_PRIVATE_KEY=0x... # operator key for CauseStarter coherence badges
# ALIGNMENT_TRUST_BOOTSTRAP_PRIVATE_KEY=0x... # funded CauseStarter trust-writer hot wallet
# VERIFIER_PRIVATE_KEY=0x...
# IMPLICATION_GRAPH_NUDGER_PRIVATE_KEY=0x...
# BRIDGE_CREATOR_PRIVATE_KEY=0x...
Expand All @@ -42,6 +49,7 @@
# IMPLICATION_ATTESTER_ADDRESS=0x...
# CONTENT_ATTESTER_ADDRESS=0x...
# CAUSE_ASSIST_COHERENCE_ATTESTER_ADDRESS=0x...
# ALIGNMENT_TRUST_BOOTSTRAP_ADDRESS=0x...
# CHANNEL_VERIFIER_TRUSTED_SIGNER_ADDRESS=0x...
# IMPLICATION_GRAPH_NUDGER_ADDRESS=0x...
# BRIDGE_CREATOR_ADDRESS=0x...
Expand All @@ -50,6 +58,9 @@
# IMPLICATION_ATTESTER_PAYMENT_ADDRESS=0x...
# CONTENT_ATTESTER_PAYMENT_ADDRESS=0x...
# VITE_DEFAULT_TRUSTED_ATTESTERS=0x...
# CauseStarter's bootstrap alignment trust service. Must equal ALIGNMENT_TRUST_BOOTSTRAP_ADDRESS.
# VITE_DEFAULT_ALIGNMENT_TRUST_ROOT=0x...
# ALIGNMENT_TRUST_DENYLISTED_ADDRESS=0x...
# VITE_DEFAULT_TRUSTED_CONTENT_ATTESTERS=0x...
# VITE_NONINFLAMMATORY_TOPIC_CID=bafy...
# VITE_DEFAULT_NUDGERS=[{"address":"0x...","name":"..."}]
Expand All @@ -59,7 +70,9 @@
# External services (set in .env.secrets)
# =============================================================================
# OPENROUTER_API_KEY=sk-...
# XAI_API_KEY=xai-... # cause-assist (Grok)
# OPENROUTER_MODEL=deepseek/deepseek-v4-flash-0731 # production services only
# DEV_OPENROUTER_MODEL=deepseek/deepseek-v4-flash-0731 # laptop scripts (fake-data-generation); does not affect services
# XAI_API_KEY=xai-... # unused if OPENROUTER_API_KEY is set (cause-assist / worker fallback)
# VITE_WALLETCONNECT_PROJECT_ID=...
# PINATA_JWT=...
BASE_SEPOLIA_RPC_URL=https://sepolia.base.org
Expand Down
1 change: 1 addition & 0 deletions .env.secrets.example
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
IMPLICATION_ATTESTER_PRIVATE_KEY=0x_your_implication_attester_wallet_private_key
CONTENT_ATTESTER_PRIVATE_KEY=0x_your_content_attester_wallet_private_key
CAUSE_ASSIST_COHERENCE_ATTESTER_PRIVATE_KEY=0x_your_causestarter_coherence_operator_key
ALIGNMENT_TRUST_BOOTSTRAP_PRIVATE_KEY=0x_your_causestarter_alignment_trust_bootstrap_key
BEAT_AGENT_PRIVATE_KEY=0x_your_beat_agent_wallet_private_key
VERIFIER_PRIVATE_KEY=0x_your_channel_verifier_signer_private_key
IMPLICATION_GRAPH_NUDGER_PRIVATE_KEY=0x_your_implication_graph_nudger_private_key
Expand Down
6 changes: 2 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.DS_Store
.envrc
node_modules
**/dist/
.env
.env.secrets
.env.render
Expand All @@ -9,10 +10,9 @@ services/implication-attester/.env
ui/.env
integration-tests/.env.local
typechain-types/
services/implication-attester/dist
published-data-ipfs-mirror/dist/
hardhat/deployments/
deployments/localhost.env
deployments/localhost.contracts-manifest.json
deployments/operator-addresses.env
/data
sdk/src/generated/
Expand All @@ -34,10 +34,8 @@ tmp/


# Local build outputs for new packages
causestarter/dist/
# Generated at container startup; local copies may contain environment-specific addresses.
/causestarter/public/config.json
cause-assist/dist/

# pi subagent scratch artifacts
.pi-subagents/
3 changes: 1 addition & 2 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ export FORCE_COLOR=1 # helps lazygit show color
protected_branch_guard commit

# Validate doc links whenever any prose doc changes (cheap, offline).
# specs/chats is raw transcripts, not maintained prose — see check-docs-links.sh.
if git diff --cached --name-only | grep -vE '^specs/chats/' | grep -qE '\.md$'; then
if git diff --cached --name-only | grep -qE '\.md$'; then
echo "Checking docs links..."
npm run check:docs-links || exit 1
fi
Expand Down
29 changes: 29 additions & 0 deletions CONTINUITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -1770,3 +1770,32 @@ which are worth checking first if this is repeated:
- Each moved package's `eslint.config.js` imports the root `eslint.metrics.mjs`
relatively and needed `../../`. `npm run lint-precommit` does **not** cover
these packages, so only a full `npx turbo run lint` surfaces it.

## 2026-08-18 — Local start publishes CauseStarter IPFS only

Temporary, reversible: `./scripts/services.sh --start` and `./scripts/deploy-causestarter.sh` no longer build/publish the eight legacy `ui` domain SPAs by default. Default `LOCAL_UI_DOMAINS` is `causestarter`. Restore with `LOCAL_UI_DOMAINS=all`. Source of truth: `scripts/ui-domains.mjs` (`resolveLocalPublishDomains`). Docs: `workflow/local-development.md`, `.env.example`, `README.md`. CauseStarter on `:8090` is unchanged.

## 2026-08-18 — Faster local seed

`./scripts/data.sh --seed` now defaults to **tiny** (was small). `gen:small` and `gen:tiny` both pass `--skip-invariants`. Statement publish reuses one document store (or parallel PublishedData writes across Hardhat wallets, receipts awaited in a batch). Seed RPC clients poll every 50ms. See `fake-data-generation/generateStatements.ts`, `fake-data-generation/seedRpc.ts`, `scripts/data.sh`.

## 2026-08-24 — Cause board is the organizer publication, not the project list

Copy sweep of [cause-page-not-a-club.md](specs/product/cause-page-not-a-club.md):
the Aligning/project list is now **fundable-projects board** in UI copy and
end-user docs; **cause board** is the CauseStarter organizer publication
(leftover “cause page” left in comments). Routes still `/portal/:cid` and
`/cause/:owner/:slug`; identifiers `fundingportal*` lag.

## 2026-08-20 — Anvil `--state` restart dump

Local `hardhat-node` was coming back empty after `stack.restart-consistency` because Docker SIGTERM did not make Anvil dump `/data/state.json` (then a fresh deploy + trust wiring filled ~41 blocks with no seed). Fix: `scripts/anvil-docker-entrypoint.sh` maps SIGTERM→SIGINT, compose `--state-interval 15` and 60s grace, restart check records block height and SIGINTs Anvil before stop. Recreate `hardhat-node` to mount the wrapper.

## 2026-08-27 — Statement generation process + exercise 1

Process: [`fake-data-generation/statement-generation.md`](fake-data-generation/statement-generation.md). Fresh-instance handoff: [`continuity/2026-08-27-statement-generation.md`](continuity/2026-08-27-statement-generation.md).

Exercise 1 (simple causes, no triples) gold set remains in `fake-data-generation/statement-generation-exercises/01-simple-causes.json`. Live copy: `fake-data-generation/seed-content/simple-causes.json`. Nested-place rollup is board inclusion, not implication (Ontario-wide planks are genuine wants; garden relevant areas + roster `within` Ontario). `loadSeedCollections` still does not read the exercises directory. Tiny seed still uses the explorer slogan for the garden project. Nested-place pairs are designed-no: `npm run gen:seed:simple-causes-implications`. Cause-assist `STATEMENT_QUALITY_GUIDANCE` includes: want the outcome (not “X is a public good”), do not plank payroll, earmark grain as a ladder (kind + place), do not emit geo implication parents. Rebuild Docker cause-assist to serve the new prompt.

Do not train implication generation on Christianity × secular-conservatism. Next: curriculum exercise 2. The implication attester prompt now rejects nested-place geographic rollup (Grey County → Ontario is a worked reject, not an accept).

5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ Commonality is a system for decentralized crowdfunding of public goods: people c
- [High-level project status](./workflow/project-status.md) AKA what milestone are we currently heading for: never deployed to mainnet yet, just did first testnet deployment, see also [MVP](./specs/product/mvp.md)
- Product boundaries between the eight sites: [product UI domains](./specs/product/ui-domains.md).
- Technical domain composition and live route ownership: [technical UI domains](./specs/tech/ui-domains.md) and the actual domain manifests under [`ui/src/domains/`](./ui/src/domains/).
- **CauseStarter** ([`causestarter/`](./causestarter/), backlog [`causestarter/TODO.md`](./causestarter/TODO.md)): founder-first core domain (eventual primary entry; Tally / LazyGiving / etc. de-emphasized as tools). Included in `./scripts/services.sh --start` and `./scripts/deploy-causestarter.sh`. LLM helpers: [`cause-assist/`](./cause-assist/).
- **CauseStarter** (SPA in [`ui/src/causestarter/`](./ui/src/causestarter/), `VITE_DOMAIN=causestarter`; glue/backlog [`causestarter/`](./causestarter/), [`causestarter/TODO.md`](./causestarter/TODO.md)): founder-first core domain (eventual primary entry; Tally / LazyGiving / etc. de-emphasized as tools). Included in `./scripts/services.sh --start` and `./scripts/deploy-causestarter.sh`. Local start currently publishes **only** the CauseStarter IPFS bundle (`LOCAL_UI_DOMAINS`; restore all UIs with `LOCAL_UI_DOMAINS=all` — see [local development](./workflow/local-development.md)). LLM helpers: [`cause-assist/`](./cause-assist/).
- [Glossary](./specs/glossary.md) — the project's ubiquitous language. Read before naming anything; it also lists the known terminology drift.
- [Architecture Decision Records](./specs/decisions/README.md) — immutable log of *why* consequential decisions were made (and what was rejected). Grep before reversing something that looks wrong.
- [Role-based guidance](./workflow/roles/README.md) on what docs to read:
- [founder](./workflow/roles/founder.md)
Expand All @@ -21,4 +22,4 @@ Commonality is a system for decentralized crowdfunding of public goods: people c
- [end-user documentation writer](./specs/user-docs.md)
- [end user](./workflow/roles/end-user.md)
- [Reviews](./workflow/reviews/README.md)
- [Marketing](/specs/product/marketing.md)
- [Marketing](./specs/product/marketing.md)
Loading
Loading