oficina / home Public

Keep schema design branch aligned with current Home main

Paul Campbell pushed by paul@keymail.dev bfe38cba780f1625b5fea14e8cbebd49bd643a7b parent c1f0eb6parent f1caf3a
210 files changed, +25849 −513
  • .gitignore +2 −0
  • AGENTS.md +3 −2
  • Makefile +19 −1
  • cmd/home/main.go +4 −3
  • cmd/oficina/main_linux.go +17 −0
  • connect/README.md +89 −0
  • connect/api.go +73 −0
  • connect/bridge.go +285 −0
  • connect/bridge_test.go +487 −0
  • connect/config.go +106 −0
  • connect/config_test.go +191 −0
  • connect/go.mod +23 −0
  • connect/go.sum +59 −0
  • connect/link_handlers.go +114 −0
  • connect/linkstore/flows.go +326 −0
  • connect/linkstore/migrations/0001_links.sql +19 −0
  • connect/linkstore/migrations/0002_person_binding.sql +1 −0
  • connect/linkstore/store.go +236 −0
  • connect/linkstore/store_test.go +647 −0
  • connect/navigation.go +164 −0
  • connect/navigation_negative_test.go +126 −0
  • connect/navigation_return.go +79 −0
  • connect/navigation_return_test.go +82 −0
  • connect/navigation_test.go +132 −0
  • connect/oauth.go +92 −0
  • connect/oauth_test.go +48 −0
  • connect/routes.go +163 −0
  • connect/routes_test.go +102 −0
  • connect/view.go +55 −0
  • docs/superpowers/specs/2026-08-30-home-design.md +45 −7
  • docs/superpowers/specs/2026-09-07-credential-return.md +13 −0
  • go.mod +12 −3
  • go.sum +36 −4
  • handoff/fresh_test.go +289 −0
  • handoff/go.mod +21 −0
  • handoff/go.sum +55 −0
  • handoff/http.go +233 −0
  • handoff/http_test.go +186 −0
  • handoff/migrations/0001_exchange.sql +26 −0
  • handoff/seal/seal.go +75 −0
  • handoff/seal/seal_test.go +123 −0
  • handoff/store.go +401 −0
  • handoff/store_test.go +325 −0
  • implementation/compatibility-checker/audit.json +461 −0
  • implementation/compatibility-checker/probe/closed-checkpoint-proof.json +29 −0
  • implementation/compatibility-checker/probe/closed_checkpoint_probe_test.go.txt +171 −0
  • implementation/compatibility-checker/probe/observation.json +28 −0
  • implementation/compatibility-checker/probe/readonly_probe_test.go.txt +54 −0
  • implementation/compatibility-checker/probe/reproduction.json +18 −0
  • implementation/compatibility-checker/proposal.json +426 −0
  • implementation/compatibility-checker/review-revision.json +37 −0
  • implementation/compatibility-checker/source-validation.json +6 −0
  • implementation/directory-runtime.md +43 −0
  • implementation/directory-store.md +13 −0
  • implementation/docs-chooser-continuation-design.md +49 −0
  • implementation/docs-team-chooser.md +19 −0
  • implementation/fresh-assertion.md +20 −0
  • implementation/home-operator-open.md +59 −0
  • implementation/home-operator-seed.md +290 −0
  • implementation/home-provisioner.md +338 −0
  • implementation/link-consumer-binding.md +21 −0
  • implementation/roster-contract.md +79 −0
  • implementation/roster-http-signing.md +219 −0
  • implementation/roster-producer-storage.md +76 −0
  • implementation/shared-purpose-seal.md +7 −0
  • implementation/team-entry.md +58 −0
  • internal/guardstest/logsinks_test.go +29 −1
  • internal/home/app.go +105 −67
  • internal/home/app_chooser_test.go +88 −0
  • internal/home/app_test.go +2 −0
  • internal/home/assertion_fresh_test.go +168 −0
  • internal/home/assertion_intent.go +38 −0
  • internal/home/brand.go +34 −0
  • internal/home/brand_test.go +73 −0
  • internal/home/compatibility_linux.go +362 −0
  • internal/home/compatibility_linux_test.go +262 −0
  • internal/home/compatibility_profiles/credential.json +158 −0
  • internal/home/compatibility_profiles/directory.json +350 −0
  • internal/home/continuation.go +11 −0
  • internal/home/directory.go +106 −0
  • internal/home/directory_catalog.go +65 −0
  • internal/home/directory_catalog_test.go +152 −0
  • internal/home/directory_runtime.go +121 −0
  • internal/home/directory_runtime_test.go +204 −0
  • internal/home/directorydata/migrations/0001_directory.sql +23 −0
  • internal/home/directorydata/operator_migrations/migrations/0001_operator_bindings.sql +34 −0
  • internal/home/directorydata/operator_schema.go +21 −0
  • internal/home/directorydata/roster.go +197 −0
  • internal/home/directorydata/roster_migrations/migrations/0001_roster.sql +43 −0
  • internal/home/directorydata/roster_pending.go +29 −0
  • internal/home/directorydata/roster_pending_test.go +197 −0
  • internal/home/directorydata/roster_test.go +388 −0
  • internal/home/directorydata/store.go +258 −0
  • internal/home/directorydata/store_test.go +255 −0
  • internal/home/docs_chooser.go +172 −0
  • internal/home/docs_chooser_test.go +261 −0
  • internal/home/docs_continue_test.go +149 −0
  • internal/home/exchange.go +111 −0
  • internal/home/exchange_test.go +290 −0
  • internal/home/handoff_failure.go +77 −0
  • internal/home/handoff_failure_test.go +90 −0
  • internal/home/keymail_continue_test.go +38 −0
  • internal/home/keymail_test.go +1 −1
  • internal/home/keymailstub_test.go +6 −3
  • internal/home/links.go +12 −2
  • internal/home/logs_test.go +8 −0
  • internal/home/markup_test.go +33 −0
  • internal/home/noscript_test.go +32 −16
  • internal/home/operator_person.go +40 −0
  • internal/home/operator_person_test.go +308 −0
  • internal/home/origins.go +110 −0
  • internal/home/origins_config_test.go +139 −0
  • internal/home/origins_test.go +104 −0
  • internal/home/page.go +4 −0
  • internal/home/passkey.go +3 −15
  • internal/home/passkey_test.go +18 −33
  • internal/home/roster_http.go +162 −0
  • internal/home/roster_http_test.go +174 −0
  • internal/home/roster_integration_test.go +553 −0
  • internal/home/roster_pending_integration_test.go +62 −0
  • internal/home/roster_runtime.go +105 −0
  • internal/home/roster_runtime_test.go +128 −0
  • internal/home/rpid_test.go +2 −2
  • internal/home/runtime.go +208 −0
  • internal/home/runtime_test.go +131 −0
  • internal/home/seal/seal.go +6 −100
  • internal/home/seal/vectors_test.go +43 −45
  • internal/home/security.go +24 −0
  • internal/home/security_test.go +38 −0
  • internal/home/signin.go +12 −8
  • internal/home/signin_return.go +68 −0
  • internal/home/signin_return_factor_test.go +98 −0
  • internal/home/signin_return_test.go +161 −0
  • internal/home/signin_test.go +14 −2
  • internal/home/static/assertion.js +2 −0
  • internal/home/static/brand/LICENSE.lucide +43 −0
  • internal/home/static/brand/apple-touch-icon.png binary
  • internal/home/static/brand/brand.css +19 −0
  • internal/home/static/brand/calendar.svg +10 −0
  • internal/home/static/brand/docs.svg +5 −0
  • internal/home/static/brand/icon-32.png binary
  • internal/home/static/brand/icon.svg +3 −0
  • internal/home/static/brand/meet.svg +2 −0
  • internal/home/static/brand/memoria.svg +4 −0
  • internal/home/static/brand/sheets.svg +4 −0
  • internal/home/static/brand/slides.svg +3 −0
  • internal/home/static/theme.css +0 −174
  • internal/home/static/tokens.css +126 −12
  • internal/home/templates/assertion.html +10 −0
  • internal/home/templates/directory.html +20 −0
  • internal/home/templates/directory_signed_out.html +5 −0
  • internal/home/templates/docs_chooser.html +11 −0
  • internal/home/templates/docs_continue.html +6 −0
  • internal/home/templates/docs_empty.html +6 −0
  • internal/home/templates/docs_unavailable.html +6 −0
  • internal/home/templates/handoff_failed.html +6 −0
  • internal/home/templates/layout.html +6 −1
  • internal/home/templates/passkey_confirm.html +7 −3
  • internal/home/templates/passkey_enrol.html +1 −1
  • internal/home/templates/recovery_codes.html +2 −2
  • internal/home/templates/signin.html +7 −3
  • internal/home/templates/signin_confirm.html +3 −1
  • internal/home/testapp_test.go +6 −1
  • internal/operator/credential.go +74 −0
  • internal/operator/directory.go +339 −0
  • internal/operator/directory_test.go +259 −0
  • internal/operator/engine.go +200 −0
  • internal/operator/engine_test.go +219 −0
  • internal/operator/inspect.go +132 −0
  • internal/operator/inspect_test.go +79 −0
  • internal/operator/migrations/credential/migrations/0001_operator.sql +19 −0
  • internal/operator/migrations/credential/migrations/0002_operator_key_identity.sql +2 −0
  • internal/operator/migrations/directory/migrations/0001_operator.sql +19 −0
  • internal/operator/migrations/directory/migrations/0002_owner_receipts.sql +7 −0
  • internal/operator/migrations/directory/migrations/0003_operator_key_identity.sql +2 −0
  • internal/operator/open_linux.go +481 −0
  • internal/operator/open_linux_test.go +403 −0
  • internal/operator/owner.go +109 −0
  • internal/operator/owner_test.go +71 −0
  • internal/operator/protocol.go +259 −0
  • internal/operator/protocol_test.go +148 −0
  • internal/operator/readonly_linux.go +430 −0
  • internal/operator/readonly_linux_test.go +161 −0
  • internal/operator/verification.go +223 −0
  • internal/operator/verification_test.go +199 −0
  • internal/provisioner/backup_linux.go +261 −0
  • internal/provisioner/backup_linux_test.go +119 −0
  • internal/provisioner/cli_linux.go +133 −0
  • internal/provisioner/cli_linux_test.go +74 −0
  • internal/provisioner/floor_linux.go +264 −0
  • internal/provisioner/floor_linux_test.go +213 −0
  • internal/provisioner/init_linux.go +164 −0
  • internal/provisioner/init_linux_test.go +116 −0
  • internal/provisioner/installations_linux.go +440 −0
  • internal/provisioner/installations_linux_test.go +481 −0
  • internal/provisioner/journal_linux.go +389 −0
  • internal/provisioner/journal_linux_test.go +219 −0
  • internal/provisioner/keys_linux.go +98 −0
  • internal/provisioner/keys_linux_test.go +38 −0
  • internal/provisioner/prepare_linux.go +195 −0
  • internal/provisioner/prepare_linux_test.go +488 −0
  • internal/provisioner/storage_linux.go +137 −0
  • internal/provisioner/storage_linux_test.go +141 −0
  • roster/cache.go +501 −0
  • roster/cache_test.go +475 −0
  • roster/go.mod +22 −0
  • roster/go.sum +57 −0
  • roster/lease_test.go +207 −0
  • roster/protocol.go +291 −0
  • roster/protocol_test.go +295 −0

CI passed — run details

.gitignore

Loading diff…

AGENTS.md

Loading diff…

Makefile

Loading diff…

cmd/home/main.go

Loading diff…

cmd/oficina/main_linux.go

Loading diff…

connect/README.md

Loading diff…

connect/api.go

Loading diff…

connect/bridge.go

Loading diff…

connect/bridge_test.go

Loading diff…

connect/config.go

Loading diff…

connect/config_test.go

Loading diff…

connect/go.mod

Loading diff…

connect/go.sum

Loading diff…

connect/link_handlers.go

Loading diff…

connect/linkstore/flows.go

Loading diff…

connect/linkstore/migrations/0001_links.sql

Loading diff…

connect/linkstore/migrations/0002_person_binding.sql

Loading diff…

connect/linkstore/store.go

Loading diff…

connect/linkstore/store_test.go

Loading diff…

connect/navigation.go

Loading diff…

connect/navigation_negative_test.go

Loading diff…

connect/navigation_return.go

Loading diff…

connect/navigation_return_test.go

Loading diff…

connect/navigation_test.go

Loading diff…

connect/oauth.go

Loading diff…

connect/oauth_test.go

Loading diff…

connect/routes.go

Loading diff…

connect/routes_test.go

Loading diff…

connect/view.go

Loading diff…

docs/superpowers/specs/2026-08-30-home-design.md

Loading diff…

docs/superpowers/specs/2026-09-07-credential-return.md

Loading diff…

go.mod

Loading diff…

go.sum

Loading diff…

handoff/fresh_test.go

Loading diff…

handoff/go.mod

Loading diff…

handoff/go.sum

Loading diff…

handoff/http.go

Loading diff…

handoff/http_test.go

Loading diff…

handoff/migrations/0001_exchange.sql

Loading diff…

handoff/seal/seal.go

Loading diff…

handoff/seal/seal_test.go

Loading diff…

handoff/store.go

Loading diff…

handoff/store_test.go

Loading diff…

implementation/compatibility-checker/audit.json

Loading diff…

implementation/compatibility-checker/probe/closed-checkpoint-proof.json

Loading diff…

implementation/compatibility-checker/probe/closed_checkpoint_probe_test.go.txt

Loading diff…

implementation/compatibility-checker/probe/observation.json

Loading diff…

implementation/compatibility-checker/probe/readonly_probe_test.go.txt

Loading diff…

implementation/compatibility-checker/probe/reproduction.json

Loading diff…

implementation/compatibility-checker/proposal.json

Loading diff…

implementation/compatibility-checker/review-revision.json

Loading diff…

implementation/compatibility-checker/source-validation.json

Loading diff…

implementation/directory-runtime.md

Loading diff…

implementation/directory-store.md

Loading diff…

implementation/docs-chooser-continuation-design.md

Loading diff…

implementation/docs-team-chooser.md

Loading diff…

implementation/fresh-assertion.md

Loading diff…

implementation/home-operator-open.md

Loading diff…

implementation/home-operator-seed.md

Loading diff…

implementation/home-provisioner.md

Loading diff…

implementation/link-consumer-binding.md

Loading diff…

implementation/roster-contract.md

Loading diff…

implementation/roster-http-signing.md

Loading diff…

implementation/roster-producer-storage.md

Loading diff…

implementation/shared-purpose-seal.md

Loading diff…

implementation/team-entry.md

Loading diff…

internal/guardstest/logsinks_test.go

Loading diff…

internal/home/app.go

Loading diff…

internal/home/app_chooser_test.go

Loading diff…

internal/home/app_test.go

Loading diff…

internal/home/assertion_fresh_test.go

Loading diff…

internal/home/assertion_intent.go

Loading diff…

internal/home/brand.go

Loading diff…

internal/home/brand_test.go

Loading diff…

internal/home/compatibility_linux.go

Loading diff…

internal/home/compatibility_linux_test.go

Loading diff…

internal/home/compatibility_profiles/credential.json

Loading diff…

internal/home/compatibility_profiles/directory.json

Loading diff…

internal/home/continuation.go

Loading diff…

internal/home/directory.go

Loading diff…

internal/home/directory_catalog.go

Loading diff…

internal/home/directory_catalog_test.go

Loading diff…

internal/home/directory_runtime.go

Loading diff…

internal/home/directory_runtime_test.go

Loading diff…

internal/home/directorydata/migrations/0001_directory.sql

Loading diff…

internal/home/directorydata/operator_migrations/migrations/0001_operator_bindings.sql

Loading diff…

internal/home/directorydata/operator_schema.go

Loading diff…

internal/home/directorydata/roster.go

Loading diff…

internal/home/directorydata/roster_migrations/migrations/0001_roster.sql

Loading diff…

internal/home/directorydata/roster_pending.go

Loading diff…

internal/home/directorydata/roster_pending_test.go

Loading diff…

internal/home/directorydata/roster_test.go

Loading diff…

internal/home/directorydata/store.go

Loading diff…

internal/home/directorydata/store_test.go

Loading diff…

internal/home/docs_chooser.go

Loading diff…

internal/home/docs_chooser_test.go

Loading diff…

internal/home/docs_continue_test.go

Loading diff…

internal/home/exchange.go

Loading diff…

internal/home/exchange_test.go

Loading diff…

internal/home/handoff_failure.go

Loading diff…

internal/home/handoff_failure_test.go

Loading diff…

internal/home/keymail_continue_test.go

Loading diff…

internal/home/keymail_test.go

Loading diff…

internal/home/keymailstub_test.go

Loading diff…

internal/home/links.go

Loading diff…

internal/home/logs_test.go

Loading diff…

internal/home/markup_test.go

Loading diff…

internal/home/noscript_test.go

Loading diff…

internal/home/operator_person.go

Loading diff…

internal/home/operator_person_test.go

Loading diff…

internal/home/origins.go

Loading diff…

internal/home/origins_config_test.go

Loading diff…

internal/home/origins_test.go

Loading diff…

internal/home/page.go

Loading diff…

internal/home/passkey.go

Loading diff…

internal/home/passkey_test.go

Loading diff…

internal/home/roster_http.go

Loading diff…

internal/home/roster_http_test.go

Loading diff…

internal/home/roster_integration_test.go

Loading diff…

internal/home/roster_pending_integration_test.go

Loading diff…

internal/home/roster_runtime.go

Loading diff…

internal/home/roster_runtime_test.go

Loading diff…

internal/home/rpid_test.go

Loading diff…

internal/home/runtime.go

Loading diff…

internal/home/runtime_test.go

Loading diff…

internal/home/seal/seal.go

Loading diff…

internal/home/seal/vectors_test.go

Loading diff…

internal/home/security.go

Loading diff…

internal/home/security_test.go

Loading diff…

internal/home/signin.go

Loading diff…

internal/home/signin_return.go

Loading diff…

internal/home/signin_return_factor_test.go

Loading diff…

internal/home/signin_return_test.go

Loading diff…

internal/home/signin_test.go

Loading diff…

internal/home/static/assertion.js

Loading diff…

internal/home/static/brand/LICENSE.lucide

Loading diff…

internal/home/static/brand/apple-touch-icon.png

Loading diff…

internal/home/static/brand/brand.css

Loading diff…

internal/home/static/brand/calendar.svg

Loading diff…

internal/home/static/brand/docs.svg

Loading diff…

internal/home/static/brand/icon-32.png

Loading diff…

internal/home/static/brand/icon.svg

Loading diff…

internal/home/static/brand/meet.svg

Loading diff…

internal/home/static/brand/memoria.svg

Loading diff…

internal/home/static/brand/sheets.svg

Loading diff…

internal/home/static/brand/slides.svg

Loading diff…

internal/home/static/theme.css

Loading diff…

internal/home/static/tokens.css

Loading diff…

internal/home/templates/assertion.html

Loading diff…

internal/home/templates/directory.html

Loading diff…

internal/home/templates/directory_signed_out.html

Loading diff…

internal/home/templates/docs_chooser.html

Loading diff…

internal/home/templates/docs_continue.html

Loading diff…

internal/home/templates/docs_empty.html

Loading diff…

internal/home/templates/docs_unavailable.html

Loading diff…

internal/home/templates/handoff_failed.html

Loading diff…

internal/home/templates/layout.html

Loading diff…

internal/home/templates/passkey_confirm.html

Loading diff…

internal/home/templates/passkey_enrol.html

Loading diff…

internal/home/templates/recovery_codes.html

Loading diff…

internal/home/templates/signin.html

Loading diff…

internal/home/templates/signin_confirm.html

Loading diff…

internal/home/testapp_test.go

Loading diff…

internal/operator/credential.go

Loading diff…

internal/operator/directory.go

Loading diff…

internal/operator/directory_test.go

Loading diff…

internal/operator/engine.go

Loading diff…

internal/operator/engine_test.go

Loading diff…

internal/operator/inspect.go

Loading diff…

internal/operator/inspect_test.go

Loading diff…

internal/operator/migrations/credential/migrations/0001_operator.sql

Loading diff…

internal/operator/migrations/credential/migrations/0002_operator_key_identity.sql

Loading diff…

internal/operator/migrations/directory/migrations/0001_operator.sql

Loading diff…

internal/operator/migrations/directory/migrations/0002_owner_receipts.sql

Loading diff…

internal/operator/migrations/directory/migrations/0003_operator_key_identity.sql

Loading diff…

internal/operator/open_linux.go

Loading diff…

internal/operator/open_linux_test.go

Loading diff…

internal/operator/owner.go

Loading diff…

internal/operator/owner_test.go

Loading diff…

internal/operator/protocol.go

Loading diff…

internal/operator/protocol_test.go

Loading diff…

internal/operator/readonly_linux.go

Loading diff…

internal/operator/readonly_linux_test.go

Loading diff…

internal/operator/verification.go

Loading diff…

internal/operator/verification_test.go

Loading diff…

internal/provisioner/backup_linux.go

Loading diff…

internal/provisioner/backup_linux_test.go

Loading diff…

internal/provisioner/cli_linux.go

Loading diff…

internal/provisioner/cli_linux_test.go

Loading diff…

internal/provisioner/floor_linux.go

Loading diff…

internal/provisioner/floor_linux_test.go

Loading diff…

internal/provisioner/init_linux.go

Loading diff…

internal/provisioner/init_linux_test.go

Loading diff…

internal/provisioner/installations_linux.go

Loading diff…

internal/provisioner/installations_linux_test.go

Loading diff…

internal/provisioner/journal_linux.go

Loading diff…

internal/provisioner/journal_linux_test.go

Loading diff…

internal/provisioner/keys_linux.go

Loading diff…

internal/provisioner/keys_linux_test.go

Loading diff…

internal/provisioner/prepare_linux.go

Loading diff…

internal/provisioner/prepare_linux_test.go

Loading diff…

internal/provisioner/storage_linux.go

Loading diff…

internal/provisioner/storage_linux_test.go

Loading diff…

roster/cache.go

Loading diff…

roster/cache_test.go

Loading diff…

roster/go.mod

Loading diff…

roster/go.sum

Loading diff…

roster/lease_test.go

Loading diff…

roster/protocol.go

Loading diff…

roster/protocol_test.go

Loading diff…