provenote

Development

Use this document as the contributor entrypoint for this fork.

If you are a first-time evaluator rather than a contributor, start with ../README.md and quickstart.md instead.

Bootstrap

bash tooling/scripts/runtime/run_uv_managed.sh sync
cd apps/web && npm ci && cd ../..

Core commands

make test-backend-cov
cd apps/web && npm test && cd ../..
bash tooling/scripts/ci/check_env_governance.sh
bash tooling/scripts/ci/check_secret_leaks.sh
bash tooling/scripts/runtime/run_uv_managed.sh run python tooling/scripts/ci/check_navigation_docs_pair.py
bash tooling/scripts/ops/audit_space_surfaces.sh
bash tooling/scripts/runtime/run_uv_managed.sh run provenote status --json --require-healthy
bash tooling/scripts/runtime/run_uv_managed.sh run provenote research-thread-to-draft research_thread:123 --verify --download-markdown --download-bundle --output-dir ./exports --json

Local manual browser flow

Use the real Chrome provenote profile only for local manual browser investigation, not for CI or the formal Playwright test runner.

Environment contract:

Initial one-time migration:

cd apps/web && npm run browser:manual:migrate-profile && cd ../..

The migration command:

Manual launcher status:

cd apps/web && npm run browser:manual:status && cd ../..

Manual launcher:

cd apps/web && npm run browser:manual && cd ../..

Default launcher semantics:

Identity tab behavior:

Those browser-private tweaks are left manual on purpose because they are brittle, version-sensitive, and outside the stable repo-owned automation surface.

If you want the isolated fallback instead of the real Chrome profile:

cd apps/web && PROVENOTE_BROWSER_MODE=managed_playwright npm run browser:manual && cd ../..

Boundary:

Maintenance runbooks

Upstream maintenance

Upstream sync SOP

  1. Read config/upstream/selective-port-ledger.json and treat live_git_truth as the only current topology source.
  2. Confirm observed_at_utc and refresh_required_after_utc before quoting any live count or merge-base conclusion.
  3. Run python3 tooling/scripts/ci/check_selective_port_ledger.py after refreshing or before citing the sample, so committed live_git_truth is verified against the current local origin refs and an on-demand upstream sample.
  4. If the freshness window has expired or the checker reports a mismatch, refresh the sample through .github/workflows/upstream-drift.yml before planning selective port work.
  5. Use historical entries[] only for selective port batching, portability review, or decision history after the current topology sample has been checked.

CI closure notes

Search-before-write evidence for navigation or gate changes:

rg -n "<keyword>" AGENTS.md CLAUDE.md README*.md docs config contracts tooling services packages apps tests ops evals mutants
rg --files -g 'AGENTS.md' -g 'CLAUDE.md' -g 'README*.md'

Documentation policy

Local runtime boundary

Local process safety

Local stop and port-release flows are fail-closed on purpose.

The only tracked navigation handbooks are:

Contribution path

  1. Start from an issue or a clearly scoped change.
  2. Keep patches narrow.
  3. Run targeted verification.
  4. Update minimal public docs only when behavior or contributor workflow changes.

See ../CONTRIBUTING.md for the review and submission boundary.