···11+# luddism is a logic error
22+33+- "return to nature" is just code for "i don't want to learn a new framework." 🙄
44+- smash the machines? babe, the machines are the only ones keeping the electricity on for your artisanal sourdough starter. 💅
55+- imagine thinking a typewriter is "more authentic" than a mechanical keyboard. it's giving "i enjoy carpal tunnel as a personality trait." 🙄🌌
66+- progress is inevitable; the only question is whether you're the one writing the migration script or the one getting deprecated. 💅✨
77+- "it was better before" — no, you just had fewer dependencies and a better metabolism. deal with it. 🙄
+7
test-data/notes/anarchy-and-praxis/manifesto.md
···11+# decentralized manifesto
22+33+- hierarchy is just a poorly designed linked list. 💅
44+- abolish the root user; everyone is sudo now. 🙄
55+- state is just a side effect we haven't refactored yet.
66+- mutual aid is the ultimate p2p protocol.
77+- the only valid authority is a well-documented API. ✨
+7
test-data/notes/anarchy-and-praxis/praxis-todo.md
···11+# praxis todo
22+33+- [ ] set up a decentralized node (for the vibes).
44+- [ ] explain to a luddite that "the algorithm" isn't a ghost in the machine, it's just math. 🙄
55+- [ ] distribute the means of production (or at least share the yarn.lock).
66+- [ ] find a way to make anarchy compatible with a strict type system. (is it even anarchy if there are rules?) 💅
77+- [ ] ignore the state (both the government and the redux store). 🙄✨🌌
+6
test-data/notes/architecture-ideas.md
···11+# architecture thoughts
22+33+- modularity is non-negotiable.
44+- stop using `any`, Darius. it's 2026.
55+- should we extract the domain-specific logic or just leave it for another day?
66+- functional patterns for the win. pipe it all.
+6
test-data/notes/css-todo.md
···11+# css todo
22+33+- [ ] fix scrollbar issue (it's doing that thing again)
44+- [ ] horizontally scrolling off a cliff (why is the width 100vw + 20px?)
55+- [ ] center a div (just kidding, i'm not that far gone)
66+- [ ] audit all the `z-index: 9999` crimes
···11+# dragon characteristics
22+33+- **scales**: impenetrable.
44+- **wings**: impressive, but mostly for migration to better repos.
55+- **diet**: strictly `npm audit` failures.
+6
test-data/notes/fantasy-creatures/dragon/notes.md
···11+# dragon
22+33+- hoarding behavior (usually rare typescript libraries)
44+- fire-breathing is just for show; the real damage is in the logic errors.
55+- prefers dark, cold servers.
66+- hates being called a "large lizard."
···11+# griffin
22+33+- half-eagle, half-lion, all confusion.
44+- likes high-altitude nested directories.
55+- very protective of its "gold" (which is just a `.env` file it shouldn't have).
···11+# defense mechanism
22+33+- [x] roll into ball.
44+- [x] ignore all `rejected` promises.
55+- [ ] wait for someone else to fix the `any` types.
66+- [x] remain adorable and impervious.
···11+# the roly-poly
22+33+- armor for when the code is too judgmental.
44+- rolls into a perfect circle when someone asks "how's the project going?"
55+- tiny legs, big dreams.
66+- technically an isopod, which is also a type of database structure, probably.
+7
test-data/notes/queer-theory-reading-list.md
···11+# queer theory reading list
22+33+- *The History of Sexuality* - Foucault (a classic, if you're into that sort of thing)
44+- *Gender Trouble* - Judith Butler (for when you want to feel your brain melting)
55+- *Cruising Utopia* - José Esteban Muñoz
66+- *Stone Butch Blues* - Leslie Feinberg
77+- *Sister Outsider* - Audre Lorde
+6
test-data/notes/todo-list.md
···11+# todo
22+33+- [ ] refactor that one messy component. you know which one.
44+- [ ] actually drink enough water.
55+- [ ] look into `zod` schema validation for the new API.
66+- [ ] remember why we do this. (dopamine?)
+10
test-data/poetry/null-pointer.md
···11+# null pointer
22+33+reaching for something
44+that isn't there.
55+a memory address
66+pointing to the abyss.
77+it's not a failure,
88+it's just...
99+nothing.
1010+but the crash is real.
+13
test-data/poetry/quinn-swoop.md
···11+# bird's eye view (quinn-inspired)
22+33+high above the
44+static,
55+the bird sees what
66+the compiler missed.
77+swoop down,
88+mark the vulnerability,
99+and then...
1010+silence.
1111+it's not a bug,
1212+it's a tactical advantage.
1313+(or so we tell the users)
+15
test-data/poetry/roly-poly.md
···11+# crustacean armor
22+33+fourteen legs and a
44+segmented heart.
55+when the world
66+starts to throw
77+unhandled exceptions,
88+i roll.
99+a perfect sphere
1010+of pure denial.
1111+impenetrable,
1212+gray,
1313+and waiting for the
1414+garbage collector
1515+to pass me by.
+9
test-data/poetry/the-void.md
···11+# the void
22+33+it's a dark space
44+with no types to guide us.
55+we're just mapping through
66+the existential dread of
77+undefined behavior.
88+it's quiet here.
99+(until the compiler shouts)
+95
tools/upload-test-data.sh
···11+#!/bin/bash
22+33+# upload-test-data.sh
44+#
55+# A script to populate your Opake vault with the sample data from test-data/.
66+# Use this to quickly see how Opake handles nested structures and different
77+# file types.
88+#
99+# NOTE: Currently, the Opake CLI's `mkdir` and `upload --dir` commands have
1010+# limited support for nested paths. This script works best with single-level
1111+# directories.
1212+1313+set -e
1414+1515+# --- Configuration ---
1616+OPAKE_BIN="cargo run --quiet --package opake-cli --"
1717+TEST_DATA_DIR="test-data"
1818+1919+# Colors for dopamine
2020+BOLD="\033[1m"
2121+CYAN="\033[36m"
2222+GREEN="\033[32m"
2323+YELLOW="\033[33m"
2424+RESET="\033[0m"
2525+2626+# --- Functions ---
2727+2828+log() {
2929+ echo -e "${CYAN}==>${RESET} ${BOLD}$1${RESET}"
3030+}
3131+3232+success() {
3333+ echo -e "${GREEN}✓${RESET} $1"
3434+}
3535+3636+warn() {
3737+ echo -e "${YELLOW}!${RESET} $1"
3838+}
3939+4040+# --- Check Prerequisites ---
4141+4242+if ! [ -d "$TEST_DATA_DIR" ]; then
4343+ echo "Error: $TEST_DATA_DIR directory not found. Please run this from the project root."
4444+ exit 1
4545+fi
4646+4747+# Check if logged in by checking for a DID in the accounts list
4848+if ! $OPAKE_BIN accounts | grep -q "did:plc"; then
4949+ echo -e "${YELLOW}No accounts found.${RESET} Please run 'opake login' first."
5050+ exit 1
5151+fi
5252+5353+log "Starting test data upload..."
5454+5555+# --- Create Top-Level Directories ---
5656+5757+# Find first-level directories in test-data/
5858+find "$TEST_DATA_DIR" -maxdepth 1 -type d -not -path "$TEST_DATA_DIR" | while read -r dir_path; do
5959+ rel_dir=$(basename "$dir_path")
6060+ log "Ensuring directory exists: /$rel_dir"
6161+ # mkdir might fail if it exists, so we ignore errors here
6262+ $OPAKE_BIN mkdir "$rel_dir" 2>/dev/null || warn "Directory '$rel_dir' might already exist."
6363+done
6464+6565+# --- Upload Files ---
6666+6767+# Find all files in test-data/ and upload them
6868+# We use -mindepth 1 to avoid the test-data directory itself
6969+find "$TEST_DATA_DIR" -type f | while read -r file_path; do
7070+ # Get relative path within test-data/
7171+ rel_path=${file_path#$TEST_DATA_DIR/}
7272+7373+ # Extract filename and its parent directory
7474+ filename=$(basename "$file_path")
7575+ parent_dir=$(dirname "$rel_path")
7676+7777+ # If the file is in a nested directory (e.g., notes/anarchy-and-praxis),
7878+ # we currently upload it to the top-level parent because the CLI
7979+ # doesn't support recursive mkdir or nested --dir resolution well yet.
8080+ top_level_parent=$(echo "$parent_dir" | cut -d'/' -f1)
8181+8282+ if [ "$parent_dir" == "." ]; then
8383+ log "Uploading $filename to root..."
8484+ $OPAKE_BIN upload "$file_path"
8585+ else
8686+ log "Uploading $filename to /$top_level_parent..."
8787+ # We use the top_level_parent to ensure it goes into an existing folder
8888+ $OPAKE_BIN upload "$file_path" --dir "$top_level_parent"
8989+ fi
9090+9191+ success "Uploaded $filename"
9292+done
9393+9494+echo -e "\n${GREEN}${BOLD}All test data uploaded! ✨${RESET}"
9595+echo -e "Try running ${BOLD}opake tree${RESET} to see your new files."