Compare commits
4 Commits
release/v1.5
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| db35142fdc | |||
| 1a63533fa0 | |||
| f692ac2d33 | |||
| ea210ed909 |
@@ -60,8 +60,8 @@ name: InboxOS — Live Pipeline
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Every 5 minutes. Adjust if you want a slower cadence.
|
||||
- cron: "*/5 * * * *"
|
||||
# Every 60 minutes. Adjust if you want a slower cadence.
|
||||
- cron: "0 * * * *"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
since_uid:
|
||||
|
||||
+58
-6
@@ -1,6 +1,6 @@
|
||||
# InboxOS — Architecture (v1 / MAJOR v1)
|
||||
|
||||
> **Pillar II gate artefact.** Owned by the CTO. Scoped to **MAJOR v1** per the Strategic Roadmap (`docs/roadmap.md`); covers all shipped MINORs (v1.0..v1.3) and the active MINOR (v1.4) of InboxOS. The CTO maintains this document; revisions follow the Pillar II Gate (PR merge by the Client, or Issue approval for smaller deltas).
|
||||
> **Pillar II gate artefact.** Owned by the CTO. Scoped to **MAJOR v1** per the Strategic Roadmap (`docs/roadmap.md`); covers all shipped MINORs (v1.0..v1.4) and the active MINOR (v1.5) of InboxOS. The CTO maintains this document; revisions follow the Pillar II Gate (PR merge by the Client, or Issue approval for smaller deltas).
|
||||
>
|
||||
> **Traces to:** [`docs/roadmap.md`](./roadmap.md) §MAJOR scope; MAJOR v1 umbrella [#26](https://git.cloudinit.dev/jc-capital/inboxos/issues/26); Pillar I Gate PR [inboxos#25](https://git.cloudinit.dev/jc-capital/inboxos/pulls/25).
|
||||
>
|
||||
@@ -42,10 +42,10 @@ We are **building** the orchestration, the extraction contract, the runbook tool
|
||||
### 1.3 Out of scope (v1.x)
|
||||
|
||||
- Multi-tenant / multi-inbox support. InboxOS is single-tenant, single-inbox.
|
||||
- Mobile / web operator surface beyond NocoDB views and CLI scripts. The NocoDB UI is the operator dashboard.
|
||||
- Mobile / web operator surface beyond NocoDB views and CLI scripts. **Exception:** v1.5 introduces a role-based web dashboard (Mailbox Owner + Admin/Operator) scoped to INTV-5.
|
||||
- External LLM providers (OpenAI, Anthropic, etc.). The threat model assumes the LLM is local.
|
||||
- Real-time push (webhook, push notification). The 5-minute live cron is the SLA.
|
||||
- v1.5+ deferred items (DEF-V1.4-1..5: container hardening expansion, encryption-at-rest, data-retention purge, NocoDB audit log schema, encrypted offsite backup).
|
||||
- v1.6+ deferred items (DEF-V1.5-1..5: dark mode, custom theming per tenant, OAuth/SAML federation, row-level database security, advanced analytics / PDF reports).
|
||||
|
||||
---
|
||||
|
||||
@@ -198,6 +198,58 @@ Every write path has a single, named, idempotent function. This is the **smalles
|
||||
|
||||
---
|
||||
|
||||
## 4.5 Data flow \u2014 v1.5 Mailbox & Administrative Management Interface
|
||||
|
||||
The v1.5 MINOR adds a **Web UI layer** (trust boundary H \u2014 "Presentation") that sits behind the existing Caddy reverse proxy (boundary B) and reads from the Data plane (boundary D) via a new **App API layer** (boundary I \u2014 "Application API"). No new persistence services are added; the Web UI reuses NocoDB, SeaweedFS logs, and the existing observability pipeline.
|
||||
|
||||
### 4.5.1 New trust boundaries for v1.5
|
||||
|
||||
| # | Trust boundary | What lives here | Trust posture | Auth model |
|
||||
|---|---|---|---|---|
|
||||
| H | **Presentation** | React/Vue SPA (Mailbox Owner Dashboard, Admin/Operator Ops Console) | Self-hosted static files served by Caddy; same trust as Caddy | Session cookie (`HttpOnly`, `Secure`, `SameSite=Strict`) |
|
||||
| I | **Application API** | New lightweight API server (e.g., FastAPI/Flask) proxying NocoDB and log queries | Runs on `inboxos-net`; only the Presentation layer reaches it | Bearer token + RBAC middleware; token issued on login |
|
||||
|
||||
**Trust flow rules (v1.5 addendum):**
|
||||
- **H → I**: Presentation SPA calls Application API with bearer token. Token carries role claim.
|
||||
- **I → D**: Application API queries NocoDB (read-only for dashboard) and SeaweedFS logs (read-only for metrics). No writes from I into D except admin config (PATCH to NocoDB `global_config` table).
|
||||
- **I → C**: Application API does NOT call Gitea or runners. The CI pipeline remains unchanged.
|
||||
- **B → H**: Caddy serves the static SPA bundle. TLS 1.2+ terminates at Caddy.
|
||||
|
||||
### 4.5.2 v1.5 component addendum
|
||||
|
||||
| # | Component | Boundary | Role | Source of truth |
|
||||
|---|---|---|---|---|
|
||||
| 13 | **Mailbox Owner Dashboard** | H | Static SPA; paginated email list, search/filter, archive/mark actions. Reads from Application API. | `frontend/mailbox-owner/` |
|
||||
| 14 | **Admin/Operator Ops Console** | H | Static SPA; metrics, logs, user permission management, global config. Reads/writes via Application API. | `frontend/admin-console/` |
|
||||
| 15 | **Application API server** | I | Proxies NocoDB queries, enforces RBAC, serves auth endpoints (`/auth/me`, `/login`, `/logout`). | `backend/api/` |
|
||||
| 16 | **RBAC middleware** | I | Role check on every request; redirects unauthorized roles; \u003c 50 ms overhead. | `backend/api/middleware/rbac.py` |
|
||||
|
||||
### 4.5.3 v1.5 data flow diagram
|
||||
|
||||
```
|
||||
Caddy (boundary B) ──▶ static SPA bundle (boundary H)
|
||||
│
|
||||
├──▶ Mailbox Owner Dashboard (read-only on Application API)
|
||||
│
|
||||
└──▶ Admin/Operator Ops Console (read + admin config on Application API)
|
||||
│
|
||||
└──▶ Application API (boundary I)
|
||||
│
|
||||
├──(REST /read)──▶ NocoDB (boundary D)
|
||||
│
|
||||
├──(S3 GET)─────▶ SeaweedFS logs (boundary D)
|
||||
│
|
||||
└──(REST /write)──▶ NocoDB global_config (boundary D)
|
||||
```
|
||||
|
||||
### 4.5.4 Idempotency and reversibility (v1.5)
|
||||
|
||||
- **Admin config writes** (`PATCH /admin/config`) are deterministic overwrites on the `global_config` table (natural key = `config_key`).
|
||||
- **Permission changes** (`PATCH /admin/users/:id/role`) update the `user_roles` bridge table; re-running the same PATCH yields the same state.
|
||||
- **Audit logs** (`POST /audit/log`) are append-only; deduplication is by `(user_id, action, timestamp, ip_hash)`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Infrastructure
|
||||
|
||||
### 5.1 Host & network
|
||||
@@ -324,7 +376,7 @@ The `scripts/cost_report.py` workflow produces a monthly NocoDB / S3 / Ollama ro
|
||||
|
||||
- `main` — production; receives Pillar III PRs only after dual approval (CPO + CTO) and the PR CI green.
|
||||
- `release/v1` — long-lived integration branch for v1 (per SAA SOP §6.3; branched from `main` HEAD at the Pillar I Gate).
|
||||
- `initiative/INTV-{1,2,3,4}-*` — reserved names for Pillar III integration per Initiative. Branch creation is the engineering team's first action on Pillar II Gate passage.
|
||||
- `initiative/INTV-{1,2,3,4,5}-*` — reserved names for Pillar III integration per Initiative. Branch creation is the engineering team's first action on Pillar II Gate passage.
|
||||
- `epic/EPIC-INB-...` — reserved names per Epic. Sub-branches per Story.
|
||||
- `feature/<short-slug>` — ad-hoc working branches for the engineering team. Rebased on the relevant `epic/` branch before merge.
|
||||
|
||||
@@ -448,6 +500,6 @@ On merge, a Gitea comment on the MAJOR v1 umbrella records the Gate decision. Th
|
||||
- [`docs/security/dpia.md`](./security/dpia.md) — DPIA (REQ-INB-58).
|
||||
- [`docs/security/threat-model.md`](./security/threat-model.md) — STRIDE threat model (REQ-INB-59).
|
||||
- [`docs/quickstart.md`](./quickstart.md) — 15-minute green-field spin-up.
|
||||
- TRDs: [`docs/trd/operator-self-service.md`](./trd/operator-self-service.md), [`docs/trd/security-compliance.md`](./trd/security-compliance.md), [`docs/trd/dual-approval-governance.md`](./trd/dual-approval-governance.md), [`docs/trd/tech-debt.md`](./trd/tech-debt.md).
|
||||
- Gitea: MAJOR v1 umbrella [#26](https://git.cloudinit.dev/jc-capital/inboxos/issues/26); Pillar I Gate PR [inboxos#25](https://git.cloudinit.dev/jc-capital/inboxos/pulls/25); v1.4.0 re-dispatch [#24](https://git.cloudinit.dev/jc-capital/inboxos/issues/24).
|
||||
- TRDs: [`docs/trd/operator-self-service.md`](./trd/operator-self-service.md), [`docs/trd/security-compliance.md`](./trd/security-compliance.md), [`docs/trd/dual-approval-governance.md`](./trd/dual-approval-governance.md), [`docs/trd/tech-debt.md`](./trd/tech-debt.md), [`docs/trd/mailbox-admin-interface.md`](./trd/mailbox-admin-interface.md).
|
||||
- Gitea: MAJOR v1 umbrella [#99](https://git.cloudinit.dev/jc-capital/inboxos/issues/99); Architecture Issue [#114](https://git.cloudinit.dev/jc-capital/inboxos/issues/114); Pillar I Gate PR [inboxos#108](https://git.cloudinit.dev/jc-capital/inboxos/pulls/108); v1.4.0 re-dispatch [#24](https://git.cloudinit.dev/jc-capital/inboxos/issues/24).
|
||||
- Paperclip: CTO routine [CIA-45](/CIA/issues/CIA-45); CTO hire [CIA-5](/CIA/issues/CIA-5).
|
||||
|
||||
+4
-1
@@ -1,5 +1,8 @@
|
||||
# InboxOS - Strategic Roadmap (`docs/roadmap.md`)
|
||||
|
||||
**TL;DR** — InboxOS — self-hosted personal ERP/CRM pipeline. Prompts-as-code, Gitea Actions, NocoDB, Ollama, SeaweedFS, Papra. This file explains how to stand it up and who to contact; the machinery detail stays lower under Details.
|
||||
|
||||
|
||||
> **Author/maintainer (content):** [CPO](/INB/agents/cpo) — sole author of milestones, sequencing, and per-MINOR requirements.
|
||||
> **Author/maintainer (governance):** [SAA](/CIA/agents/saa) — owns the MAJOR Umbrella binding, the `## MAJOR scope` declaration, the `## MINOR release list`, and the Pillar I Gate PRs that bind this Roadmap to the Gitea hierarchy.
|
||||
> **Project:** InboxOS (`/INB/projects/inboxos`)
|
||||
@@ -34,7 +37,7 @@ The MINOR names below are used verbatim to name Gitea Milestones (SAA SOP §6.3,
|
||||
- **v1.2 - Initial Pipeline Hardening** — papra + imapclient + schema discipline. _Status: shipped._
|
||||
- **v1.3 - Stable Cut** — stable post-recovery cut. _Status: shipped; release quarantined and recovered per [INB-295](/INB/issues/INB-295) / inboxos#17. No further commits under this MINOR without a fresh Pillar I Gate round._
|
||||
- **v1.4 - Operator UX + Security Hardening** — operator tooling (scripts, dashboards, tutorials), NocoDB views, container hardening, DPIA, threat model, PII scrub (held by `REQ-INB-57` until board approval lands). _Status: active, re-dispatching per inboxos#24 to enforce dual-approval governance on the v1.4.0 wave._
|
||||
- **v1.5 - Mailbox & Administrative Management Interface** — role-based UI/UX for Mailbox Owners and Admin/Operators, RBAC routing, and design-system compliance. _Status: declared, pending Pillar I Gate approval._
|
||||
- **v1.5 - Mailbox & Administrative Management Interface** — role-based UI/UX for Mailbox Owners and Admin/Operators, RBAC routing, and design-system compliance. _Status: Pillar I Gate passed (PR !108 merged by grimacing, 2026-06-10). Active; CTO handoff in progress._
|
||||
- **Backlog** — approved v1 work not yet scheduled into a MINOR. _Status: open._
|
||||
|
||||
The Gitea Milestones in the repo carry the **title only** form (`v1.0-MVP`, `v1.1-Beta`, `v1.2-initial`, `v1.4`) for historical reasons. The SAA will:
|
||||
|
||||
@@ -0,0 +1,262 @@
|
||||
# TRD \u2014 INTV-5: Mailbox & Administrative Management Interface (v1.5)
|
||||
|
||||
> **Pillar II Gate artefact.** Owned by the CTO. Traces to [INTV-5 #109](https://git.cloudinit.dev/jc-capital/inboxos/issues/109) and the MAJOR v1 umbrella [#99](https://git.cloudinit.dev/jc-capital/inboxos/issues/99). Cross-links to [`docs/architecture/v1.md`](./architecture/v1.md).
|
||||
> **Status:** Draft \u2014 awaiting Client approval via Pillar II Gate PR.
|
||||
|
||||
---
|
||||
|
||||
## 1. Initiative scope
|
||||
|
||||
**INTV-5** delivers a polished, role-based Mailbox & Administrative Management Interface for InboxOS v1.5.
|
||||
|
||||
**Success criteria:**
|
||||
1. A Mailbox Owner View exists where owners can view, search, and manage ingested emails.
|
||||
2. An Admin/Operator Ops Console exists providing observability and administrative controls.
|
||||
3. RBAC automatically routes users and prevents cross-role access.
|
||||
4. UI/UX passes design-system compliance (responsive, accessible, consistent).
|
||||
|
||||
**Out of scope:**
|
||||
- Email ingestion engine backend (existing pipeline).
|
||||
- Third-party email client integrations.
|
||||
- Advanced analytics / PDF reports (v1.6+ candidate).
|
||||
- Dark mode, custom theming per tenant (v1.6+ candidate).
|
||||
- OAuth/SAML federation (v1.6+ candidate).
|
||||
|
||||
---
|
||||
|
||||
## 2. Functional requirements
|
||||
|
||||
| ID | Requirement | Acceptance criteria |
|
||||
|---|---|---|
|
||||
| FR-1 | Mailbox Owner can view paginated list of ingested emails. | ≤ 500 ms search/filter latency on reference dataset. |
|
||||
| FR-2 | Mailbox Owner can archive or mark emails as processed. | Actions persist within 1 s; visual feedback confirms. |
|
||||
| FR-3 | Admin/Operator can view ingestion rates, error logs, system latency. | Metrics refresh ≤ 30 s; sourced from existing NocoDB/logs. |
|
||||
| FR-4 | Admin/Operator can manage user permissions and global config. | Permission changes take effect within 60 s. |
|
||||
| FR-5 | RBAC routes users to the correct view automatically. | No manual URL bypass can reach a protected view. |
|
||||
| FR-6 | All v1.5 views are responsive and design-system compliant. | Lighthouse accessibility ≥ 90; design-system lint passes in CI. |
|
||||
|
||||
---
|
||||
|
||||
## 3. Non-functional requirements
|
||||
|
||||
| ID | Requirement | Target |
|
||||
|---|---|---|
|
||||
| NFR-1 | RBAC latency overhead | < 50 ms per request. |
|
||||
| NFR-2 | Dashboard search/filter latency | < 500 ms on reference dataset. |
|
||||
| NFR-3 | Permission propagation latency | < 60 s after change. |
|
||||
| NFR-4 | Lighthouse accessibility score | ≥ 90 on both views. |
|
||||
| NFR-5 | CI design-system lint | Blocks merge on failure. |
|
||||
|
||||
---
|
||||
|
||||
## 4. API contracts
|
||||
|
||||
### 4.1 Mailbox data query
|
||||
```
|
||||
GET /api/v1/mailbox?search=<query>&filter=status:<status>&page=<page>&limit=50
|
||||
Headers: Authorization: Bearer <token>
|
||||
Response: {
|
||||
"data": [{ "message_id", "subject", "sender", "status", "date" }],
|
||||
"meta": { "page", "limit", "total", "has_more" }
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 Mailbox actions
|
||||
```
|
||||
POST /api/v1/mailbox/:message_id/archive
|
||||
POST /api/v1/mailbox/:message_id/mark-processed
|
||||
Response: { "ok": true, "message_id" }
|
||||
```
|
||||
|
||||
### 4.3 Observability metrics
|
||||
```
|
||||
GET /api/v1/admin/metrics
|
||||
Headers: Authorization: Bearer <token>
|
||||
Response: {
|
||||
"ingestion_rate_5m", "error_count_5m", "system_latency_p99"
|
||||
}
|
||||
```
|
||||
|
||||
### 4.4 Admin config
|
||||
```
|
||||
GET /api/v1/admin/config
|
||||
POST /api/v1/admin/config
|
||||
GET /api/v1/admin/users
|
||||
PATCH /api/v1/admin/users/:id/role
|
||||
```
|
||||
|
||||
### 4.5 RBAC middleware
|
||||
```
|
||||
GET /api/v1/auth/me
|
||||
Response: { "user_id", "role", "permissions": [] }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Data model
|
||||
|
||||
### 5.1 Users / Roles (new tables in NocoDB)
|
||||
|
||||
| Table | Key columns | Notes |
|
||||
|---|---|---|
|
||||
| `users` | `user_id` (PK), `email`, `created_at` | Natural key = email. |
|
||||
| `roles` | `role_id` (PK), `role_name` (owner|admin|operator) | Enum enforced at app layer. |
|
||||
| `user_roles` | `user_id`, `role_id`, `assigned_at`, `assigned_by` | Many-to-many bridge. |
|
||||
| `audit_log` | `event_id`, `user_id`, `action`, `resource`, `timestamp`, `ip_hash` | GDPR-friendly; IP hashed. |
|
||||
|
||||
### 5.2 Migration plan
|
||||
- `apply_schemas.py --check` extended to verify new tables.
|
||||
- Seed script creates default roles on first deploy.
|
||||
- Migration is idempotent (CREATE IF NOT EXISTS).
|
||||
|
||||
---
|
||||
|
||||
## 6. Dependencies
|
||||
|
||||
### Internal
|
||||
- `blockedBy` INTV-2 (PII scrub must not be bypassed by new UI).
|
||||
- Coordinated with INTV-4 (tech-debt lane) \u2014 no schema conflicts.
|
||||
|
||||
### External
|
||||
- NocoDB REST API (existing).
|
||||
- Existing observability logs (SeaweedFS / runner artifacts).
|
||||
|
||||
---
|
||||
|
||||
## 7. Test plan
|
||||
|
||||
| Layer | What | How |
|
||||
|---|---|---|
|
||||
| Unit | RBAC middleware | `pytest` with mocked roles. |
|
||||
| Integration | API endpoints | `pytest` against local NocoDB fixture. |
|
||||
| E2E | Dashboard flows | Playwright / Cypress (headless) against dev server. |
|
||||
| Accessibility | Lighthouse CI | Enforced in PR CI (`lighthouse ≥ 90`). |
|
||||
| Security | RBAC bypass attempts | Automated pentest script (security-engineer). |
|
||||
|
||||
---
|
||||
|
||||
## 8. Acceptance criteria (measurable)
|
||||
|
||||
- [ ] All 4 Epics reach `done` in v1.5 Milestone with passing CI.
|
||||
- [ ] RBAC enforces role separation at routing layer (no manual URL bypass).
|
||||
- [ ] Both views are responsive and pass design-system lint.
|
||||
- [ ] Lighthouse accessibility score ≥ 90 on both views.
|
||||
- [ ] Search/filter latency < 500 ms on reference dataset.
|
||||
|
||||
---
|
||||
|
||||
## 9. Story map + dependency graph
|
||||
|
||||
### 9.1 Story list (20 Stories across 4 Epics)
|
||||
|
||||
**Epic A \u2014 Mailbox Owner Dashboard (#112)**
|
||||
- S1 #116 \u2014 Spec Mailbox Owner Dashboard API contract (`domain/backend`, `pattern/a`, `cto-approved`)
|
||||
- S2 #117 \u2014 Implement Mailbox Owner Dashboard backend API (`domain/backend`, `pattern/a`)
|
||||
- S3 #118 \u2014 Spec Mailbox Owner Dashboard UI (`domain/ux`, `pattern/b`, `cto-approved`)
|
||||
- S4 #119 \u2014 Implement Mailbox Owner Dashboard frontend (`domain/frontend`, `pattern/b`)
|
||||
- S5 #120 \u2014 QA Mailbox Owner Dashboard integration tests (`domain/security`, `pattern/e`)
|
||||
|
||||
**Epic B \u2014 Admin/Operator Ops Console (#110)**
|
||||
- S1 #121 \u2014 Spec Ops Console API contract (`domain/backend`, `pattern/a`, `cto-approved`)
|
||||
- S2 #122 \u2014 Implement Ops Console backend API (`domain/backend`, `pattern/a`)
|
||||
- S3 #123 \u2014 Spec Ops Console UI (`domain/ux`, `pattern/b`, `cto-approved`)
|
||||
- S4 #124 \u2014 Implement Ops Console frontend (`domain/frontend`, `pattern/b`)
|
||||
- S5 #125 \u2014 QA Ops Console integration tests (`domain/security`, `pattern/e`)
|
||||
|
||||
**Epic C \u2014 RBAC & Auth Layer (#111)**
|
||||
- S1 #126 \u2014 Spec RBAC API contract and middleware (`domain/backend`, `pattern/a`, `cto-approved`)
|
||||
- S2 #127 \u2014 Implement RBAC middleware and role checks (`domain/backend`, `pattern/a`)
|
||||
- S3 #128 \u2014 Spec Users/Roles data model (`domain/data-model`, `pattern/d`, `cto-approved`)
|
||||
- S4 #129 \u2014 Implement Users/Roles tables and migrations (`domain/data-pipeline`, `pattern/d`)
|
||||
- S5 #130 \u2014 Integrate RBAC middleware with frontend routing (`domain/frontend`, `pattern/e`)
|
||||
- S6 #131 \u2014 Security test RBAC enforcement verification (`domain/security`, `pattern/e`)
|
||||
|
||||
**Epic D \u2014 Design-System Compliance (#113)**
|
||||
- S1 #132 \u2014 Spec design-system token set and lint rules (`domain/ux`, `pattern/b`, `cto-approved`)
|
||||
- S2 #133 \u2014 Implement design-system tokens in frontend (`domain/frontend`, `pattern/b`)
|
||||
- S3 #134 \u2014 Implement responsive layouts and navigation patterns (`domain/frontend`, `pattern/b`)
|
||||
- S4 #135 \u2014 Add design-system lint to CI (`domain/devops`, `pattern/d`)
|
||||
|
||||
### 9.2 Mermaid dependency graph
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
%% Spec nodes (cto-approved)
|
||||
A_S1["A-S1 #116 API spec (backend)"]
|
||||
A_S3["A-S3 #118 UI spec (ux)"]
|
||||
B_S1["B-S1 #121 API spec (backend)"]
|
||||
B_S3["B-S3 #123 UI spec (ux)"]
|
||||
C_S1["C-S1 #126 RBAC spec (backend)"]
|
||||
C_S3["C-S3 #128 Data spec (data-model)"]
|
||||
D_S1["D-S1 #132 Design spec (ux)"]
|
||||
|
||||
%% Implementation nodes
|
||||
A_S2["A-S2 #117 API impl (backend)"]
|
||||
A_S4["A-S4 #119 UI impl (frontend)"]
|
||||
A_S5["A-S5 #120 QA (security)"]
|
||||
B_S2["B-S2 #122 API impl (backend)"]
|
||||
B_S4["B-S4 #124 UI impl (frontend)"]
|
||||
B_S5["B-S5 #125 QA (security)"]
|
||||
C_S2["C-S2 #127 RBAC impl (backend)"]
|
||||
C_S4["C-S4 #129 Data impl (data-pipeline)"]
|
||||
C_S5["C-S5 #130 RBAC integrate (frontend)"]
|
||||
C_S6["C-S6 #131 Pentest (security)"]
|
||||
D_S2["D-S2 #133 Tokens impl (frontend)"]
|
||||
D_S3["D-S3 #134 Layout impl (frontend)"]
|
||||
D_S4["D-S4 #135 Lint CI (devops)"]
|
||||
|
||||
%% Dependencies
|
||||
A_S1 --> A_S2
|
||||
A_S2 --> A_S4
|
||||
A_S3 --> A_S4
|
||||
A_S4 --> A_S5
|
||||
A_S2 --> A_S5
|
||||
|
||||
B_S1 --> B_S2
|
||||
B_S2 --> B_S4
|
||||
B_S3 --> B_S4
|
||||
B_S4 --> B_S5
|
||||
B_S2 --> B_S5
|
||||
|
||||
C_S1 --> C_S2
|
||||
C_S1 --> C_S5
|
||||
C_S2 --> C_S5
|
||||
C_S3 --> C_S4
|
||||
C_S4 --> C_S5
|
||||
C_S2 --> C_S6
|
||||
C_S5 --> C_S6
|
||||
|
||||
D_S1 --> D_S2
|
||||
D_S1 --> D_S3
|
||||
D_S2 --> D_S4
|
||||
D_S1 --> D_S4
|
||||
|
||||
%% Cross-Initiative dependencies
|
||||
C_S2 --> A_S4
|
||||
C_S2 --> B_S4
|
||||
C_S5 --> A_S4
|
||||
C_S5 --> B_S4
|
||||
D_S2 --> A_S4
|
||||
D_S2 --> B_S4
|
||||
D_S3 --> A_S4
|
||||
D_S3 --> B_S4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Out of scope
|
||||
|
||||
- OAuth/SAML federation (future MINOR).
|
||||
- Row-level database security (future enhancement).
|
||||
- Dark mode / custom theming per tenant (future MINOR).
|
||||
- Advanced analytics / PDF reports (future MINOR).
|
||||
- PII scrub implementation (handled by INTV-2).
|
||||
|
||||
---
|
||||
|
||||
## 11. References
|
||||
|
||||
- [`docs/architecture/v1.md`](./architecture/v1.md) \u2014 System architecture (trust boundaries, components).
|
||||
- [`docs/roadmap.md`](./roadmap.md) \u2014 Strategic Roadmap (Pillar I artefact).
|
||||
- Gitea: INTV-5 [#109](https://git.cloudinit.dev/jc-capital/inboxos/issues/109); TRD Issue [#115](https://git.cloudinit.dev/jc-capital/inboxos/issues/115); Epics [#112](https://git.cloudinit.dev/jc-capital/inboxos/issues/112), [#110](https://git.cloudinit.dev/jc-capital/inboxos/issues/110), [#111](https://git.cloudinit.dev/jc-capital/inboxos/issues/111), [#113](https://git.cloudinit.dev/jc-capital/inboxos/issues/113).
|
||||
- Paperclip: CTO routine [CIA-80](/CIA/issues/CIA-80).
|
||||
Reference in New Issue
Block a user