Neon Law
  • Services
  • Book Consultation opens in a new tab
  • Sign in

← Operating Neon Law Navigator

Environment Matrix

Chapter 4 of 7 · Section 24 of 45

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 Navigator deployment matrix
  • 7. The `/app` mount and HTTP route ownership
  • 8. `neon` — the whole brand seam
  • 9. Live rollout checkpoint
  • 10. Set one site to one version

3. Provision the Infrastructure

  • 11. The APIs that light up
  • 12. Network and storage buckets
  • 13. How a Project portal reaches a client
  • 14. A document's bytes and authorization are separate
  • 15. A private image registry
  • 16. The cluster comes up
  • 17. What setup owns — and what follows it

4. Environment Matrix

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

5. Configure the Trust Boundaries

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

6. Ship the Instance

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

7. Wrap Up

  • 45. 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
  • X opens in a new tab
  • LinkedIn opens in a new tab
  • YouTube opens in a new tab
  • API opens in a new tab
  • Blog opens in a new tab
  • Contact
  • Glossary opens in a new tab
  • Navigator opens in a new tab
  • Notations opens in a new tab
  • Presentations opens in a new tab
  • Privacy opens in a new tab
  • Team opens in a new tab
  • Terms opens in a new tab
  • Testimonials
  • UX opens in a new tab
  • 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
  • Justice Technology AssociationMission-Aligned Partner opens in a new tab

Attorney advertisement. Nothing here is legal advice without a signed retainer for an active project. Past results do not guarantee future outcomes.

© 2026 Shook Law PLLC

NEON LAW® is a registered trademark of Shook Law PLLC, U.S. Reg. No. 6,325,650 opens in a new tab

Powered by Neon Law Navigator 26.10.4

Everyone deserves to be seen. Made with ❤️ in 🗽.