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.
bash tooling/scripts/runtime/run_uv_managed.sh sync
cd apps/web && npm ci && cd ../..
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
Use the real Chrome provenote profile only for local manual browser investigation, not for CI or the formal Playwright test runner.
Environment contract:
PROVENOTE_BROWSER_MODE=real_chrome_profile|managed_playwright
real_chrome_profilePROVENOTE_CHROME_USER_DATA_DIR
~/.cache/provenote/browser/chrome-user-dataPROVENOTE_CHROME_PROFILE_NAME
provenotePROVENOTE_CHROME_PROFILE_KEY
Profile 1PROVENOTE_SOURCE_CHROME_USER_DATA_DIR
~/Library/Application Support/Google/ChromePROVENOTE_SOURCE_CHROME_PROFILE_KEY
PROVENOTE_CHROME_CDP_PORT
9342PROVENOTE_BROWSER_URL
PROVENOTE_BROWSER_IDENTITY_LABEL
PROVENOTE_BROWSER_IDENTITY_ACCENT
#2563ebInitial one-time migration:
cd apps/web && npm run browser:manual:migrate-profile && cd ../..
The migration command:
Local State and the selected Profile xxx/~/.cache/provenote/browser/chrome-user-data/Local State~/.cache/provenote/browser/chrome-user-data/Profile 1/Singleton* lock artifacts from the new rootManual launcher status:
cd apps/web && npm run browser:manual:status && cd ../..
Manual launcher:
cd apps/web && npm run browser:manual && cd ../..
Default launcher semantics:
browser:manual is start-or-attach.runtime-cache/browser/chrome-instance.json.runtime-cache/browser-identity/index.htmlIdentity tab behavior:
<repo-label> · <cdp-port> · browser laneThose 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:
test:e2e, and UITestRunRequest remain isolated and continue to use the managed Playwright browser pathselective-port-first policy for upstream maintenance rather than a default merge/rebase sync.config/upstream/selective-port-ledger.json under live_git_truth.entries[] are planning context only. They must not be cited as the current origin/upstream topology once live_git_truth disagrees with them.live_git_truth by manually dispatching .github/workflows/upstream-drift.yml before citing current counts, merge-base status, or fork-topology conclusions.tooling/scripts/ci/check_selective_port_ledger.py as the repo-side proof that the committed live_git_truth block still matches the current local origin/main and the current upstream main sample.observed_at_utc and refresh_required_after_utc as freshness metadata for the block that declares them: once the freshness window expires, that sample becomes historical context only until it is re-sampled.origin/main and upstream/main do not share a merge-base, so this repository must be treated as a long-lived productized selective-port fork rather than a normal merge/rebase candidate.origin_only_commits=9 and upstream_only_commits=654. These counts are current only through the active live_git_truth block and must not be copied into prose after that block goes stale.live_git_truth first, then use historical entries only for batching or portability context.upstream remote. Upstream maintenance scripts resolve the official upstream branch on demand, compare against it, and clean up temporary refs before exit.config/upstream/selective-port-ledger.json and treat live_git_truth as the only current topology source.observed_at_utc and refresh_required_after_utc before quoting any live count or merge-base conclusion.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..github/workflows/upstream-drift.yml before planning selective port work.entries[] only for selective port batching, portability review, or decision history after the current topology sample has been checked.Required Green Gate in .github/workflows/test.yml:592 and .github/workflows/test.yml:1173.GEMINI_API_KEY and OPEN_NOTEBOOK_ENCRYPTION_KEY sealed. required-ci-env records the hosted-safe PR path, and real CI secret enforcement is limited to non-PR trusted runs.OPEN_NOTEBOOK_EXTERNAL_PR_FAST_GATE=1 marker keeps commit-governance range guards lane-aware so Dependabot/external fast gates skip cleanly on empty post-baseline work instead of failing on topology alone..github/workflows/test.yml on the external-pr-fast-gate job, so trusted same-repo PR lanes still keep the normal commit-governance fail-closed behavior.test.yml and CodeQL lanes:
.github/workflows/dependency-review.yml.github/workflows/zizmor.yml.github/workflows/trivy.yml.github/workflows/trufflehog.ymlRequired Green Gate: they provide fresh repo-owned dependency and workflow hardening evidence without silently widening the deterministic required aggregate.react and react-dom should stay on the same patch line, and @size-limit/file should move with size-limit instead of leaving a stale peer version behind.docker/login-action, dorny/paths-filter, and anthropics/claude-code-action; validate these through workflow contract tests and hosted-lane reruns rather than treating them like ordinary app or runtime dependency bumps.Auditable Quality Gate, UIUX Gemini Gate, Live Integration, and manual Claude review lanes) must stay behind the protected owner-approved-sensitive environment.tooling/scripts/ci/run_in_consistent_container.sh:347..github/workflows/uiux-gemini-gate.yml:30.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'
docs/assets/{hero,demo,proof,architecture,social} pool only..env, .env.local, and user-specific runtime overrides remain a local runtime boundary.Local stop and port-release flows are fail-closed on purpose.
.runtime-cache/local/pids with command and start-time metadata.tooling/scripts/dev/stop_local.sh and tooling/scripts/ci/release_local_ports.sh only stop recorded repo-owned services.pkillkillallkill -9xargs killosascriptSystem EventsThe only tracked navigation handbooks are:
AGENTS.md and CLAUDE.mdapps/webservices/apipackages/coretestsSee ../CONTRIBUTING.md for the review and submission boundary.