Skip to content

Local E2E Workflow

The formal local end-to-end loop is now repository-owned:

This is the standard way to validate the business loop:

Obsidian Thought -> ingest -> reactive action -> Bookmark -> writeback -> NocoDB

Preconditions

  • Docker-compatible runtime available locally OrbStack headless was validated as one working option.
  • uv installed

One-command entry point

Use the repository script:

bash
scripts/run-local-e2e.sh

This does four things in order:

  1. docker compose up -d for the local NocoDB service
  2. bootstraps the 自媒体作品快照 / 作品快照 schema and seed rows
  3. loads the generated env file
  4. runs the formal e2e suite

Useful variants

Run pytest in quiet mode:

bash
scripts/run-local-e2e.sh -- -q

Stop the local NocoDB service after the run:

bash
scripts/run-local-e2e.sh --down

Rebuild from a clean local state:

bash
scripts/run-local-e2e.sh --fresh -- -q

Filter to one test:

bash
scripts/run-local-e2e.sh -- -k writeback -q

Generated state

Bootstrap writes:

text
tests/fixtures/nocodb_local/.env.generated

That file is the source of truth for:

  • RUNEX_E2E_NOCO_URL
  • RUNEX_E2E_NOCO_TOKEN
  • RUNEX_E2E_NOCO_BASE_ID
  • RUNEX_E2E_NOCO_TABLE_ID

Runtime NocoDB data lives under:

text
tests/fixtures/nocodb_local/.runtime/

Both paths are git-ignored.

Clean rebuild mode

Use --fresh when you want to throw away the local NocoDB runtime state and bootstrap again from scratch:

bash
scripts/run-local-e2e.sh --fresh -- -q

This does three extra things before the normal workflow:

  1. docker compose down
  2. removes tests/fixtures/nocodb_local/.runtime/
  3. removes tests/fixtures/nocodb_local/.env.generated

Use it after changing bootstrap logic, table shape, or seed assumptions.

What is actually proven

The formal suite covers two assertions:

  1. the local NocoDB seed rows are readable through the real media-snapshot source adapter
  2. a real Obsidian Thought fixture containing a bilibili link ingests, creates a Bookmark, and writes that link into the local NocoDB table

This is intentionally stronger than a stub-only test and intentionally safer than using production NocoDB.

Maintenance rule

When a fixture note, NocoDB column mapping, or ontology rule changes, rerun:

bash
scripts/run-local-e2e.sh -- -q

Do not treat the local fixture as throwaway data. It is part of the repository contract.