Neon Law
  • Fractional CTO
  • Litigation
  • Fractional GC
  • Legal Services
  • Sign in
← Operating Neon Law Navigator

Environment Matrix

Chapter 4 of 7 · Section 23 of 44

Sections

1. Intro

  • 1. Deploy your own
  • 2. Agenda

2. Prepare Google Cloud

  • 3. Bring your own project
  • 4. Dry-run first
  • 5. Private assets and domain restricted sharing
  • 6. The one project that is public on purpose
  • 7. The Navigator deployment matrix
  • 8. The `/app` mount and HTTP route ownership
  • 9. `neon` — the whole brand seam
  • 10. Live rollout checkpoint
  • 11. Set one site to one version

3. Provision the Infrastructure

  • 12. The APIs that light up
  • 13. Network and five buckets
  • 14. How a Project portal reaches a client
  • 15. One matter's document never backs another matter's
  • 16. A private image registry
  • 17. The cluster comes up

4. Environment Matrix

  • 18. Three operating modes, two deployment profiles
  • 19. Configuration precedence: the first source wins
  • 20. Local dev controls: inputs read by `navigator dev`
  • 21. Local runtime: what `.devx/env` generates
  • 22. The store: SurrealDB
  • 23. Where SurrealDB authorization lives
  • 24. Deployed runtime: core web and worker wiring
  • 25. Deployed runtime: identity and access
  • 26. Deployed runtime: email, signatures, and billing
  • 27. Deployed runtime: repositories, content, AI, and scheduled work
  • 28. Provision and ship: variables read by the operator CLI
  • 29. Ancillary operations and opt-in test controls
  • 30. When simulated data appears

5. Configure the Trust Boundaries

  • 31. Secrets: the invariants that gate the boot
  • 32. Sign-in: bring an OIDC provider; passwords live there, not here
  • 33. Role rings: who can do what
  • 34. Provider signup and parity across the deployments
  • 35. The external surface — every third party, in one place
  • 36. The two service deployments
  • 37. Security architecture

6. Ship the Instance

  • 38. Ship and verify
  • 39. Post the verified handoff in `#navigator`
  • 40. Point your domain at the instance (optional)
  • 41. Drive it from the CLI
  • 42. Make it yours — white-label under your own brand
  • 43. This is how we set up Neon Law Foundation

7. Wrap Up

  • 44. Canonical references

Where SurrealDB authorization lives

LayerDecidesDuring and after the port
persons.roleThe tier: owner, admin, lawyer, clerk, clientUnchanged — the sole tier answer
person_project_roles.participationPer-matter scopeUnchanged — the sole scope answer
Embedded RegoRenders the decision per requestCompiled at web-process boot
Surreal PERMISSIONSPer-row engine enforcementExplicit NONE; every process signs in as root

Presenter notes

The schema carries PERMISSIONS NONE, so Navigator's authorization lives above the database. SurrealDB does have an opinion — every table carries a PERMISSIONS clause the engine evaluates per row against the authenticated session — so adopting it forced a decision rather than inheriting one.

The decision is that authorization stays above the database. Every table says PERMISSIONS NONE out loud even though that is also the engine's default, because an omitted clause and a deliberate one are otherwise indistinguishable, and a test fails if a table ever lands without one. Be precise about what NONE buys: it denies every non-root session outright, and root bypasses it — so the security property comes from the connection, and the clause is a fail-closed backstop for a session that does not exist yet.

Mirroring the role-and-participation model into per-table PERMISSIONS FOR select expressions was the rejected alternative, and the conflict check is why. That traversal walks from a proposed client across matters the requesting person has no part in — which is exactly what imputed firm-wide conflict checking under Model Rule 1.10 means — so a mirrored policy would need a carve-out at its first real query. Two languages that must agree is also the expensive failure: a rule that drifts is either over-disclosure, a confidentiality breach, or under-disclosure, which in a conflict check means a missed conflict. Neither shows up as an error.

What reopens it: the first surface that hands query power closer to a user — a folder read daemon, an MCP tool issuing SurrealQL, a debugging console — does not get the root credential. It lands its own scoped non-root session and settles that credential in each deployment's secrets.enc.yaml at the same time.

View all slidesOpen display
← PreviousNext →
Neon Law
BlogContactFoundationNavigatorPresentationsWorkshops
Contact us — contact@neonlaw.com+1 510 800 2080
  • Nevada
    5150 Mae Anne AveSte 405-9002Reno, NV 89523
  • New York
    12 E 49th St18th FloorNew York, NY 10017
  • Washington
    720 Seneca StSte 107-715Seattle, WA 98101

© 2026 Shook Law PLLC and Neon Law Foundation

This is attorney advertisement. Nothing on this site is legal advice. Neon Law is the trade name of Shook Law PLLC, and an attorney-client relationship begins only with a signed retainer between you and Shook Law PLLC. Published flat fees cover the scope each one names and do not include third-party filing fees. Every legal matter is different, and past results do not guarantee a similar result.

Shook Law PLLC is a proud supporter of the Neon Law Foundation , a 501(c)(3) nonprofit.

Neon Law Foundation is a Nevada nonprofit corporation and a 501(c)(3) tax-exempt organization. It does not practice law and cannot represent you.

Nothing on this site is legal advice, and nothing here creates an attorney-client relationship.

5150 Mae Anne Ave Ste 405-9999, Reno, NV 89523
support@neonlaw.orgTransparency & public disclosures

Powered by Neon Law Navigator #26.8.20-hotfix.4

Open source — neon-law-foundation/navigator GitHub stars 2