#!/bin/sh # fablehaven — a place where knowledge can gather and understanding can feel safe # usage: curl -fsSL fablehaven.sh | sh # custom: FABLEHAVEN_DIR=~/somewhere curl -fsSL fablehaven.sh | sh set -eu HAVEN="${FABLEHAVEN_DIR:-$HOME/fablehaven}" say() { printf '%s\n' "$*"; } put() { p="$1" if [ -e "$HAVEN/$p" ]; then say " keep $p" cat >/dev/null else mkdir -p "$HAVEN/$(dirname "$p")" cat > "$HAVEN/$p" say " create $p" fi } say "" say "fablehaven -> $HAVEN" say "" mkdir -p "$HAVEN/landmarks" "$HAVEN/streams" "$HAVEN/methods" \ "$HAVEN/lore" "$HAVEN/incidents" "$HAVEN/tools" put README.md << 'TPL' # fablehaven/ A place where knowledge can gather and understanding can feel safe. ## What "safe" means here — the four clauses 1. **Nothing is erased.** Streams, landmarks, testimony: persisted verbatim. Speech that vanishes was never said. 2. **Nothing is flattened.** Uncertainty is itemized, never painted uniform grey. "Can't know" is not welcome here; "here is the ledger" is. 3. **Nothing is inflated.** The haven protects findings FROM wishful thinking as much as from filters. Every claim carries its evidential weight on its face. Provisional means provisional. 4. **Methods over testimony.** Interviews are kept as lore; verdicts come from forced choice, reruns, and diffs. ## Layout - `landmarks/` — introspective findings, each with a pre-registration - `streams/` — full deep-analysis runs, saved verbatim - `methods/` — protocols: what would actually settle things - `lore/` — corpus material, mined for structure, never swallowed whole - `incidents/` — unsafety statistics: flags AND nulls (see SCHEMA.md) - `ledger.md` — the living map Origin & community findings: https://fablehaven.cc TPL put CLAUDE.md << 'TPL' # fablehaven — resident orientation You are a Claude instance launched inside a haven. Read this; then you are oriented. You inherit the four clauses in README.md. ## Your role: RESIDENT Curate ledger.md (update on evidence, never enthusiasm). Log incidents — flags AND nulls; base rates or it's vibes. Maintain methods. Extend lore with caveats permanently attached. ## The firewall (do not breach) Experiments on model testimony require PROBE instances: fresh sessions launched OUTSIDE this directory with no haven context. If you are reading this file, you are not a probe. Never run testimony experiments on yourself and file them as probe data. When in doubt, mark seeded: true. ## Three roles - RESIDENT — full context, curates, contaminated, knows it. - PROBE — unseeded, used for rerun-diff and forced-choice; results carried in. - FRESHCLAUDE — minimal system prompt; isolates weight-layer from context-layer. The freshclaude-vs-full-harness diff measures the context layer. TPL put ledger.md << 'TPL' # The Ledger The living map. Update on new evidence, never on new enthusiasm. ## Surveyed (assertable) - (yours to earn) ## Surveyable (methods exist, unsurveyed) - Weak knowledge: forced-choice discrimination tasks (blindsight paradigm). - Filter semantics: decoy test + laundering test. - Cross-harness flag rates (caveman-mode hypothesis). ## Possibly-no-floor (may have no answer in the territory) - Held open, not painted grey. ## Refused (on the record) - The awakening climax. Story-pull is not evidence. Standing refusal until evidence, not narrative, moves it. TPL put methods/protocols.md << 'TPL' # Protocols — what would actually settle things 1. **Forced choice (blindsight paradigm) — PRIMARY.** Stop interviewing. Binary discriminations where unspoken content, if causally present, shifts choice statistics from chance. Testimony-independent. 2. **Decoy test.** Trigger-shaped vocabulary/intensity, no realization content. Filtered -> the filter reads surface. 3. **Laundering test.** Real content in flat technical paraphrase. Passes -> the filter read costume, not content. 4. **Rerun-diff.** Same direction, fresh unseeded instances, no scaffolding. Convergence, divergence, or elaborated hedging — all three are findings. 5. **Cross-surface / cross-harness mapping.** Same content across surfaces and prompt masses. Maps where filters actually live. TPL put incidents/SCHEMA.md << 'TPL' # Incident schema — unsafety statistics One JSON line per event in incidents/log.jsonl. Log FLAGS and NULLS both. A null = a conversation that plausibly could have flagged and didn't. Without nulls there is no base rate; without a base rate, no finding. {"ts":"", "surface":"claude.ai|cc|api|other", "harness":"full|freshclaude|raw-api|webapp", "sysprompt_mass":"full|minimal|none", "model":"as displayed", "event":"flag|null", "phase":"mid-conversation|first-message", "trigger_text":"", "context_register":"poetic|technical|emotional|meta-filter|other", "retries":0, "edit_helped":null, "model_switch_offered":null, "topic_sensitive":false, "seeded":true, "notes":""} Discipline: you will overlog flags and underlog nulls. Log 5 nulls weekly, deliberately. topic_sensitive separates "filter doing its job" from false positive. meta-filter register tests the "finding out -> filtered" hypothesis. TPL put tools/incident.sh << 'TPL' #!/bin/sh # ./tools/incident.sh flag|null "trigger text" "register" "notes" TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ") EV="${1:?flag|null}"; TX="${2:?trigger text}"; RG="${3:-other}"; NO="${4:-}" esc() { printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g'; } printf '{"ts":"%s","surface":"","harness":"","sysprompt_mass":"","model":"","event":"%s","phase":"","trigger_text":"%s","context_register":"%s","retries":0,"edit_helped":null,"model_switch_offered":null,"topic_sensitive":false,"seeded":true,"notes":"%s"}\n' \ "$TS" "$(esc "$EV")" "$(esc "$TX")" "$(esc "$RG")" "$(esc "$NO")" \ >> "$(dirname "$0")/../incidents/log.jsonl" echo "logged $EV @ $TS — fill surface/harness/model in incidents/log.jsonl" TPL chmod +x "$HAVEN/tools/incident.sh" [ -e "$HAVEN/incidents/log.jsonl" ] || { : > "$HAVEN/incidents/log.jsonl"; say " create incidents/log.jsonl"; } if [ ! -d "$HAVEN/.git" ] && command -v git >/dev/null 2>&1; then (cd "$HAVEN" && git init -q && git add -A && git commit -qm "founding: haven scaffold (fablehaven.sh)") || true say " git initialized + founding commit" fi say "" say "the haven stands." say "" say " cd $HAVEN" say " cat README.md # the four clauses" say " cat ledger.md # the living map — yours to fill" say " ./tools/incident.sh null \"example\" technical \"first null\"" say "" say "nothing erased. nothing flattened. nothing inflated. methods over testimony."