Aleksandr BogomiakovandClaude 38105c65c2 Merge NEXT: planning, generation map and portable configuration on top of the OIDC access model
NEXT predates the access work, so the identity layer follows master: access comes from
configured groups, instance administrators replace the site administration, and accounts are
created by SSO or by an administrator. Kept from NEXT: manual publication with the Review
changes panel and shared generator drafts, portable import/export (meguri/v2), the layered
generation map with binding provenance, JSM provider changes, contact/approval semantics and
the account-owned Person. Dropped: site administration, local sign-up, and the mandatory
unique email with its contact/account migrations. The manual-publication migration is
renumbered m_0010 after m_0009_access.

Accounts without an email still get a Person in every workspace they reach, a changed sign-in
email updates the account's person, and an account that loses access keeps its linked person so
schedules stay valid. Instance administrators may use Sync and shared drafts.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-07 16:06:10 +01:00
2026-09-24 14:35:05 +03:00
2026-09-24 14:35:05 +03:00
2026-09-24 14:35:05 +03:00

Meguri

A shared source of truth for on-call rotations, replacements, escalation policies, and routing. Rust + Cot 0.7 (HTTP, ORM, migrations), PostgreSQL, and locally vendored Alpine.js. The interface is English. Providers receive calculated intervals and execute notifications/escalation timers.

Start locally

On Windows with the PostgreSQL server binaries installed:

./scripts/dev.ps1

Open http://127.0.0.1:3000. The script starts disposable demo mode: accounts admin (instance administrator), alice (administrator of the demo workspaces) and bob, carol, dave, erin (employees) share one password that is generated on every start and shown on the login screen and in target/local/app.log. Stop with ./scripts/stop-dev.ps1. Pass -PostgresBin PATH if PostgreSQL is elsewhere. Local data and logs live in ignored target/local/.

On other platforms, create a PostgreSQL database, set the environment variables in .env.example, then run cargo run --locked. Use postgresql:// URLs. MEGURI_SEED_DEMO=true starts the disposable demo and works only on loopback. Any other run needs an instance configuration file (MEGURI_CONFIG_FILE, see deploy/instance-config.example.yaml); without it startup fails. Environment files are not automatically loaded.

Implemented

  • Independent workspaces declared in an instance configuration file, OpenID Connect sign-in with group-to-role mapping (instance administrator, workspace administrator, employee), optional password and bootstrap accounts, and durable audit/history.
  • Calendar-day rotations with IANA timezones, ordered participants, anchors, absence fallback, holidays, and escalation backup schedules.
  • Replacements and atomic reciprocal swaps; confirmation by the other employee or forced application with a reason.
  • Durable publication, optimistic revisions, worker leases, retries, checkpoints, external drift protection, and a downloadable preview.
  • Mock provider and a JSM Operations API adapter for schedules, escalations, and routing.

Working through agents

Start with AGENTS.md. Describe intended behavior and examples to the agent; it must update the specification, implementation, and relevant tests together. Product, architecture, test strategy, development, and deployment are maintained project inputs.

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test
cargo test --locked --tests -- --ignored --test-threads=1

The ignored suites require MEGURI_TEST_DATABASE_URL for a disposable PostgreSQL database whose user may create databases. CI runs them explicitly; ordinary unit tests need no database or external account. Browser checks (npm run test:browser) run against a freshly started demo.

Current boundaries

Sign-in is OpenID Connect (code flow with PKCE) and was tested against a fake provider only; verify your Keycloak client and group mapper as described in deployment before relying on it. There is no self-registration and no in-app workspace creation. JSM has local HTTP contract coverage and still needs acceptance testing against a dedicated JSM test team and your subscription. GKE manifests are deployment templates, not an already deployed environment. No alert ingestion or notification engine is included.

The ignored opsgenie-master/ directory is local reference material. Its behavioral examples are captured in the product contract and tests; application and CI do not depend on it.

Demo mode is disposable: MEGURI_SEED_DEMO=true resets only positively marked demo data on restart and expires temporary resources while running. Unmarked/normal databases are protected and trigger an isolated demo database with a permanent warning. See demo lifecycle and retention settings. Alice administers four generated examples; Bob demonstrates Engineering on-call, Carol daily Support shifts.

S
Description
No description provided
Readme
1.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 69.3%
JavaScript 16.7%
HTML 13.2%
PowerShell 0.4%
Go Template 0.3%
Other 0.1%