From 57610cdbaed4b57ff082728b216a6ec2d45b1912 Mon Sep 17 00:00:00 2001 From: Claus Lohmar Date: Wed, 14 Oct 2026 10:53:44 +0000 Subject: [PATCH] docs: add the project plan, M0/M0.1 specs, agent guide and README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PROJECT_PLAN.md: the decision log of record through D-042 and the M0.1 slice - docs/specs: SPEC-002…009 — routing · door · identity/sessions · /setup · enroll/login · roles/chain/recovery · module registry · the web layer & PWA (plus docs/specs/README.md, the index) - AGENT.md: the working rules — commit AND push at every submilestone (gate green), Conventional Commits, never commit secrets - README.md: the quickstart, the first-run/SSH-tunnel steps and the localhost/loopback caveat (SPEC-009 §13 Q-3): with an https base URL the CSRF/session cookies are Secure, so reach the app at localhost/127.0.0.1 - config.example.yaml: the settings template (D-035) --- AGENT.md | 79 ++++++++ PROJECT_PLAN.md | 38 +++- README.md | 83 ++++++++ config.example.yaml | 55 +++++ docs/specs/README.md | 40 ++++ docs/specs/spec-002-routing-model.md | 210 ++++++++++++++++++++ docs/specs/spec-003-core-door.md | 158 +++++++++++++++ docs/specs/spec-004-identity-sessions.md | 164 +++++++++++++++ docs/specs/spec-005-setup-wizard.md | 133 +++++++++++++ docs/specs/spec-006-enroll-login.md | 152 ++++++++++++++ docs/specs/spec-007-roles-chain-recovery.md | 90 +++++++++ docs/specs/spec-008-module-registry.md | 107 ++++++++++ docs/specs/spec-009-web-pwa.md | 192 ++++++++++++++++++ 13 files changed, 1497 insertions(+), 4 deletions(-) create mode 100644 AGENT.md create mode 100644 README.md create mode 100644 config.example.yaml create mode 100644 docs/specs/README.md create mode 100644 docs/specs/spec-002-routing-model.md create mode 100644 docs/specs/spec-003-core-door.md create mode 100644 docs/specs/spec-004-identity-sessions.md create mode 100644 docs/specs/spec-005-setup-wizard.md create mode 100644 docs/specs/spec-006-enroll-login.md create mode 100644 docs/specs/spec-007-roles-chain-recovery.md create mode 100644 docs/specs/spec-008-module-registry.md create mode 100644 docs/specs/spec-009-web-pwa.md diff --git a/AGENT.md b/AGENT.md new file mode 100644 index 0000000..547a70f --- /dev/null +++ b/AGENT.md @@ -0,0 +1,79 @@ +# AGENT.md — MyDay + +> Operating instructions for AI agents working in this repository. +> **Status:** M0 + M0.1 implemented (SPEC-002…009); next milestone **M1 — org structure**. + +--- + +## 1. What MyDay is + +**MyDay** is Sechpoint's **self-hosted, single-tenant** employee app (a **PWA** for mobile and +desktop): **time & absence**, **reporting**, and the **company org structure** those depend on. + +It is **one Go binary** — a small **core** (`MyDay.auth`) plus drop-in **modules**. + +--- + +## 2. The source of truth + +| Artefact | Role | +|---|---| +| **`PROJECT_PLAN.md`** | the **decision log of record** — read it first. If a decision changes, update it **in the same change**. | +| **`docs/specs/`** | implementation specs. **Specs precede code.** | +| **`README.md`** | the human quickstart. | +| **`.opencode/git.env`** | the agent **git-workflow contract** (gitignored; see `.opencode/git.env.example`). | + +--- + +## 3. Doctrine — the rules that must not be broken + +1. **The path is the request.** Identity lives in the path; the query carries only transient state. +2. **The rule of the door.** The door *resolves*; the handler *authenticates*. A module **never + parses a raw path**. +3. **Identification ≠ authorisation.** The GUID is a *username*; the **session cookie is the + credential**. A bookmark is never a login. +4. **Two doors, one destination.** ROUTER (path) and HANDLER (`do`/`action`) both resolve to + `(module, function, params)` (D-039). +5. **Modules are independent.** A module depends only on **core interfaces** and **owns its own + tables** — never reach into another module's data. +6. **Delete, don't redirect.** Reserved names come from one source. +7. **Every page renders inside the shell.** The core layout owns the document, the header and the + nav (`Registry.Nav()`); a module supplies **content** only. The CSP is `script-src 'self'`: + **no inline `