--- title: Metrix Key Architectural Decisions type: curated permalink: main/projects/d5a7f581-c442-4554-87b9-ee723b8b0258/curated/metrix-key-architectural-decisions stable_id: 783ddcc0-2e2e-4731-906a-e67cabc552a5 scope: project project_id: d5a7f581-c442-4554-87b9-ee723b8b0258 workspace_type: development usage_profile_id: null preference_context: development document_type: decisions revision: 1 source_memory_ids: [] source_checkpoint_ids: [] source_file_ids: [] source_git_commit: e660bc7bb4fc5ccda47decb4d514874a148ed9b2 source_git_commits: - e660bc7bb4fc5ccda47decb4d514874a148ed9b2 source_agent_sync_ids: [] model_connection: Sub2API model_name: git-restore source_count: 29 source_revisions: memory:e71d9113-be70-4792-8a7d-81df157ea9a0: '1' memory:52d53ae2-ce5b-4207-9813-0c9d3de029ce: '1' memory:761650df-f1df-4e5a-b23a-adf2d01d5c9f: '1' memory:34271d12-a706-491b-a06b-f561e81f7346: '1' memory:cf3e85fe-dcf3-4af3-9a17-edfe63b2f56c: '1' memory:5924806e-b234-49f7-b971-3c844fd07cf3: '3' memory:6c4cbc6d-a59b-4128-9d6a-cb9652cff00e: '1' memory:bc21af00-1127-44f8-93b7-aa484a7041c2: '1' memory:a3896ad9-d30c-4963-9232-a7d1ab571d19: '2' source_dispositions: processed: 29 unchanged: 0 unsupported: 0 skipped: 0 cited_source_ids: - curated_baseline:783ddcc0-2e2e-4731-906a-e67cabc552a5 - memory:6c4cbc6d-a59b-4128-9d6a-cb9652cff00e - memory:bc21af00-1127-44f8-93b7-aa484a7041c2 - memory:a3896ad9-d30c-4963-9232-a7d1ab571d19 - memory:5924806e-b234-49f7-b971-3c844fd07cf3 - git:packaging/README.md - git:packaging/pypiserver/Dockerfile - memory:cf3e85fe-dcf3-4af3-9a17-edfe63b2f56c - memory:e71d9113-be70-4792-8a7d-81df157ea9a0 - memory:52d53ae2-ce5b-4207-9813-0c9d3de029ce - memory:761650df-f1df-4e5a-b23a-adf2d01d5c9f - memory:34271d12-a706-491b-a06b-f561e81f7346 job_cited_source_ids: [] conflicts: [] supersedes: [] preferences: [] source_cursor: 162 source_hash: e2fcea7c8a9e0df7a91925fb2a9beabd922058868310effc908f95df2d78b218 prompt_version: 2026-08-12.3 schema_version: '3' curation_job_id: null created_at: '2026-08-12T18:02:51.479473+00:00' updated_at: '2026-09-23T15:09:11.699391+00:00' tags: - Metrix - development - decisions restored_from_commit: 6a6a895eafcca6052e81a14fca103a42635dd1c2 --- ## Key Decisions (as recorded) | Decision ID | Summary | Rationale | Status | |------------|----------|-----------|--------| | `e71d9113‑be70‑4792‑8a7d‑81df157ea9a0` | Keep **CapacityReport** as independent sub‑module + Docker image | Isolated UI & historic data handling | Implemented, runs separately | | `52d53ae2‑ce5b‑4207‑9813‑0c9d3de029ce` | Switch editor highlighting to **Shiki** | Monaco mis‑highlights multiline f‑strings | Integrated (theme sync pending) | | `761650df‑f1df‑4e5a‑b23a‑adf2d01d5c9f` | Adopt **action‑based permission model** | Simplify checks, avoid page rule duplication | All modules migrated | | `34271d12‑a706‑491b‑a06b‑f561e81f7346` | Consolidate script‑run retention to `{max_count, max_days}` | Remove overlapping policies | Unified | | `cf3e85fe‑dcf3‑4af3‑9a17‑edfe63b2f56c` | Freeze local `docs/project_context.md`; **MemRelay only** stores memory | Avoid bidirectional sync, per user request | File read‑only, MemRelay source of truth | | `5924806e‑b234‑49f7‑b971‑3c844fd07cf3` | Formalise **workflow**: Chinese‑first, KISS/YAGNI, ordered steps (implement→clean→memory→docs→commit) | Standardise practice | Documented, tooling enforced | | *Docker‑socket mount* | Mount host Docker socket into `metrix‑app` | Enables host‑level container management for scripts | Documented, admin‑only | | *Offline bundle* | Tarred images + compose files for air‑gapped deployment | Offline environments cannot pull from Docker Hub | `scripts/build_docker.py` creates bundle | | *Internal PyPI server* | Run `pypiserver` container, serve wheels offline | Remove external PyPI dependency | Implemented, UI `/pypi` added | | *Windows directory‑rename lock* | Work‑around: move locked objects, rename, move back, `git submodule sync` | IDE lock on `.git` prevented rename | Fixed (see troubleshooting) | | *Sub‑module locations* | **CapacityReport** & **InterferenceETL** moved under `plugins/` with independent Docker images | Clear structure, isolated versioning | Completed (2026‑08‑17) | Source: `curated_baseline:783ddcc0‑2e2e‑4731‑906a‑e67cabc552a5`.