@@ -1,184 +1,40 @@ |
||
| 1 | 1 |
# Development Log |
| 2 | 2 |
|
| 3 |
-Acest fișier păstrează deciziile care schimbă scopul aplicației, regulile de operare sau modelul de deployment. Nu înlocuiește git history; explică de ce au apărut schimbările mari. |
|
| 4 |
- |
|
| 5 |
-## 2026-06-06 - Repository and Deployment Split |
|
| 6 |
- |
|
| 7 |
-Decizie: codul aplicației se dezvoltă local și se publică în GitPrep. Jumper rămâne runtime/deploy target. |
|
| 8 |
- |
|
| 9 |
-Locații: |
|
| 10 |
- |
|
| 11 |
-- checkout local: `/Users/bogdan/Documents/Workspaces/Xdev/Madagascar/LocalAuthority` |
|
| 12 |
-- GitPrep canonical remote: `git@192.168.2.102:repositories/bogdan/LocalAuthority.git` |
|
| 13 |
-- GitPrep web: `http://192.168.2.102:3000/bogdan/LocalAuthority` |
|
| 14 |
-- runtime jumper: `/usr/local/xdev-host-manager` |
|
| 15 |
- |
|
| 16 |
-Motiv: |
|
| 17 |
- |
|
| 18 |
-- editarea directă pe jumper amesteca dezvoltarea cu runtime-ul |
|
| 19 |
-- aplicația are acum scope mai mare și va continua să evolueze |
|
| 20 |
-- avem nevoie de istoric, review și deploy controlat |
|
| 21 |
- |
|
| 22 |
-Regulă: |
|
| 23 |
- |
|
| 24 |
-- `scripts/deploy_to_jumper.sh` publică aplicația pe jumper |
|
| 25 |
-- `config/` nu se copiază implicit |
|
| 26 |
-- `config/` se copiază doar cu `--include-config`, la cerere explicită |
|
| 27 |
- |
|
| 28 |
-## 2026-06-06 - Scope Expanded Beyond Host Registry |
|
| 29 |
- |
|
| 30 |
-Aplicația a pornit ca manager pentru registrul de hosturi, dar scope-ul curent include: |
|
| 31 |
- |
|
| 32 |
-- registry de hosturi Madagascar |
|
| 33 |
-- manifest DNS local pentru jumper și as01 |
|
| 34 |
-- Work Orders pentru schimbări operaționale confirmabile |
|
| 35 |
-- autoritate locală de certificate pentru hosturi |
|
| 36 |
-- exporturi pentru servicii consumatoare, preferabil prin git |
|
| 37 |
- |
|
| 38 |
-Numele de produs a devenit `Madagascar Local Authority`. |
|
| 39 |
- |
|
| 40 |
-Numele tehnice rămân stabile pentru compatibilitate: |
|
| 41 |
- |
|
| 42 |
-- service systemd: `host-manager` |
|
| 43 |
-- user Unix: `host-manager` |
|
| 44 |
-- runtime path: `/usr/local/xdev-host-manager` |
|
| 45 |
-- environment file: `/etc/xdev/host-manager.env` |
|
| 46 |
- |
|
| 47 |
-## 2026-06-06 - Work Orders Before Destructive Registry Changes |
|
| 48 |
- |
|
| 49 |
-Decizie: numele cu impact operațional nu se șterg direct din UI. |
|
| 50 |
- |
|
| 51 |
-Exemplu inițial: |
|
| 52 |
- |
|
| 53 |
-- `pmx.*.madagascar.xdev.ro` |
|
| 54 |
-- `pbs.*.madagascar.xdev.ro` |
|
| 55 |
- |
|
| 56 |
-Aceste nume au fost create pentru vhosturi nginx cu certificate Let's Encrypt. Odată cu CA-ul local, intenția este retragerea lor, dar eliminarea din registry se face doar după: |
|
| 57 |
- |
|
| 58 |
-- inventarierea vhosturilor |
|
| 59 |
-- crearea și instalarea certificatelor locale |
|
| 60 |
-- eliminarea configurațiilor legacy |
|
| 61 |
-- testarea accesului prin numele canonice |
|
| 62 |
-- verificarea că numele nu mai sunt folosite |
|
| 63 |
-- aprobarea finală a operatorului |
|
| 64 |
- |
|
| 65 |
-Confirmarea unui WO este blocată dacă checklist-ul nu este complet. |
|
| 66 |
- |
|
| 67 |
-## 2026-06-06 - Local DNS Resolution Rules |
|
| 68 |
- |
|
| 69 |
-Regulă: local nu se folosește wildcard pentru `*.madagascar.xdev.ro`. |
|
| 70 |
- |
|
| 71 |
-Doar numele cunoscute din manifestul local trebuie să se rezolve intern. Numele necunoscute trebuie să întoarcă `NXDOMAIN`, chiar dacă DNS public poate avea wildcard către IP-ul public. |
|
| 72 |
- |
|
| 73 |
-Resolverele interne sunt: |
|
| 74 |
- |
|
| 75 |
-- jumper: `192.168.2.100` |
|
| 76 |
-- as01: `192.168.2.2` |
|
| 77 |
- |
|
| 78 |
-Sync-ul rămâne explicit: |
|
| 79 |
- |
|
| 80 |
-```bash |
|
| 81 |
-./scripts/sync_local_hosts.sh --apply --verify |
|
| 82 |
-``` |
|
| 83 |
- |
|
| 84 |
-## 2026-06-06 - Dependency Policy |
|
| 85 |
- |
|
| 86 |
-Regulă: nu se instalează npm, pip sau CPAN direct pe hosturi. |
|
| 87 |
- |
|
| 88 |
-Acceptat: |
|
| 89 |
- |
|
| 90 |
-- pachete din distribuție, când sunt necesare |
|
| 91 |
-- Perl din distribuție |
|
| 92 |
-- module Perl core/distribution |
|
| 93 |
- |
|
| 94 |
-CPAN se folosește doar dacă pachetul ajunge prin repo-ul local auditat. |
|
| 95 |
- |
|
| 96 |
-Pachete de sistem instalate în timpul evoluției: |
|
| 97 |
- |
|
| 98 |
-- `ripgrep` pe jumper |
|
| 99 |
-- `rsync` pe jumper |
|
| 100 |
-- `sqlite` pe jumper |
|
| 101 |
-- `perl-DBD-SQLite` pe jumper |
|
| 102 |
-- `sqlite3` pe mazeri/GitPrep |
|
| 103 |
- |
|
| 104 |
-## 2026-06-06 - OTP Login Keeps a Password-Manager-Friendly Form Shape |
|
| 105 |
- |
|
| 106 |
-Observație: unele password managere și autofill-uri mobile nu inițiau corect pe login-ul Madagascar Local Authority, deși completarea mergea pe o pagină similară din PBX management. |
|
| 107 |
- |
|
| 108 |
-Diferențe relevante observate pe pagina care funcționa: |
|
| 109 |
- |
|
| 110 |
-- formular clasic `method="post"` |
|
| 111 |
-- câmp de cont cu `autocomplete="username"` |
|
| 112 |
-- câmp unic pentru codul OTP, separat de cele 6 căsuțe vizuale |
|
| 113 |
- |
|
| 114 |
-Decizie: |
|
| 115 |
- |
|
| 116 |
-- UI-ul rămâne cu 6 căsuțe OTP |
|
| 117 |
-- formularul include și câmpuri ajutătoare off-screen pentru `username` și OTP agregat |
|
| 118 |
-- JS sincronizează codul complet între câmpul agregat și cele 6 căsuțe |
|
| 119 |
-- formularul păstrează `autocomplete="on"` la nivel de form, ca hint-urile specifice de pe câmpuri să nu fie neutralizate |
|
| 120 |
- |
|
| 121 |
-Scop: |
|
| 122 |
- |
|
| 123 |
-- compatibilitate mai bună cu password managere și autofill mobil |
|
| 124 |
-- fără a complica interfața vizibilă |
|
| 125 |
- |
|
| 126 |
-## 2026-06-08 - Commit and Push Is the Development Contract |
|
| 127 |
- |
|
| 128 |
-Observație: schimbările lăsate mult timp ca dirty working tree se pierd ușor în timpul deploy-urilor, reseturilor și schimbărilor de context. Pentru development, unitatea de lucru trebuie să fie commit-ul local, nu un set de fișiere uitate în stare necomisă. |
|
| 129 |
- |
|
| 130 |
-Decizie: |
|
| 131 |
- |
|
| 132 |
-- se lucrează cu commit-uri locale mici și coerente |
|
| 133 |
-- pentru test live, commit-ul se împinge în checkout-ul runtime de pe jumper cu `git push jumper-runtime HEAD:main` |
|
| 134 |
-- pentru arhivare și istoric canonic, același commit se împinge în GitPrep cu `git push origin main` |
|
| 135 |
-- jumper rămâne target de test live, nu locul principal de editare |
|
| 136 |
-- `scripts/deploy_to_jumper.sh` rămâne unealtă explicită de rsync deploy, dar nu înlocuiește disciplina commit/push |
|
| 137 |
-- `BUILD` rămâne sursa vizibilă pentru ce versiune rulează |
|
| 138 |
- |
|
| 139 |
-Scop: |
|
| 140 |
- |
|
| 141 |
-- niciun front de lucru să nu rămână doar în fișiere dirty locale sau runtime |
|
| 142 |
-- testul live pe jumper să fie legat de un commit identificabil |
|
| 143 |
-- GitPrep să păstreze istoria canonică pentru arhivare și recuperare |
|
| 144 |
-- badge-ul de build și meta tag-ul `xdev-build` devin verificarea rapidă pentru ce rulează |
|
| 145 |
- |
|
| 146 |
-## 2026-06-09 - SQLite Runtime Source of Truth |
|
| 147 |
- |
|
| 148 |
-Observație: editările de hosts făcute în aplicația live puteau rămâne în working tree-ul de pe jumper sau puteau fi suprascrise/confuzionate la push-ul de cod. Modelul vechi descria simultan `config/hosts.yaml` ca registry editabil în git și ca dată operațională runtime, ceea ce nu era o sursă de adevăr clară. |
|
| 149 |
- |
|
| 150 |
-Decizie: |
|
| 151 |
- |
|
| 152 |
-- `var/host-manager.sqlite` devine sursa de adevăr runtime pentru registry și Work Orders |
|
| 153 |
-- `config/hosts.yaml` și `config/work-orders.yaml` rămân seed/snapshot/export compatibility files |
|
| 154 |
-- la prima pornire, aplicația seed-uiește documentele lipsă din YAML în SQLite |
|
| 155 |
-- download-urile `/download/hosts.yaml`, `/download/local-hosts.tsv` și `/download/monitoring.json` sunt randate din SQLite |
|
| 156 |
-- `config/local-hosts.tsv` rămâne manifest generat explicit pentru sync-ul DNS local |
|
| 157 |
-- push-urile de cod către jumper nu trebuie să înlocuiască baza runtime din `var/` |
|
| 158 |
- |
|
| 159 |
-Scop: |
|
| 160 |
- |
|
| 161 |
-- editările făcute în UI să nu se piardă la deploy/push de cod |
|
| 162 |
-- să existe o singură autoritate runtime |
|
| 163 |
-- YAML/TSV să rămână utile pentru export, review și bootstrap fără să fie storage-ul live |
|
| 164 |
- |
|
| 165 |
-## 2026-06-09 - Relational Runtime Schema |
|
| 166 |
- |
|
| 167 |
-Observație: primul pas SQLite mutase sursa de adevăr din git în baza de date, dar o păstra ca document YAML într-o tabelă generică. Asta rezolva pierderea editărilor la push, dar nu oferea o bază de date operațională reală. |
|
| 168 |
- |
|
| 169 |
-Decizie: |
|
| 170 |
- |
|
| 171 |
-- `hosts.fqdn` devine cheia reală pentru hosturi, ca numele complete să evite coliziuni între domenii |
|
| 172 |
-- `legacy_id` rămâne doar compatibilitate pentru UI/API-ul curent |
|
| 173 |
-- aliasurile sunt păstrate în `host_aliases`, inclusiv după retragere |
|
| 174 |
-- vhosturile sunt în `vhosts` și pot fi mutate prin schimbarea `host_fqdn` |
|
| 175 |
-- rolurile, sursele, flagurile și SSH sunt în tabele separate, nu coloane adăugate continuu în `hosts` |
|
| 176 |
-- workerii de date au `data_workers`, `dhcp_leases` și `mdns_observations` |
|
| 177 |
-- certificatele emise au `certificates` și `certificate_dns_names` |
|
| 178 |
-- `documents` rămâne doar tabel legacy pentru migrare din modelul vechi document-store |
|
| 179 |
- |
|
| 180 |
-Scop: |
|
| 181 |
- |
|
| 182 |
-- schema să poată susține inventar, DNS, vhosturi, observații externe și certificate fără să piardă istoric operațional |
|
| 183 |
-- aliasurile/vhosturile retrase să rămână audibile în baza de date |
|
| 184 |
-- structura să fie extensibilă fără să supraîncarce tabelul `hosts` |
|
| 3 |
+Acest fisier este indexul jurnalelor de dezvoltare. Pastreaza harta componentelor si regulile pentru adaugarea de intrari noi; continutul istoric detaliat sta in fisierele din [`.doc/development-logs/`](development-logs/). |
|
| 4 |
+ |
|
| 5 |
+Jurnalele explica deciziile care schimba scopul aplicatiei, regulile de operare, modelul de date sau modelul de deployment. Nu inlocuiesc git history; explica de ce au aparut schimbarile mari. |
|
| 6 |
+ |
|
| 7 |
+## Reguli |
|
| 8 |
+ |
|
| 9 |
+- adauga intrari noi in componenta afectata direct |
|
| 10 |
+- daca o decizie atinge mai multe componente, pune intrarea in componenta principala si leaga celelalte fisiere relevante |
|
| 11 |
+- pastreaza formatul `## yyyy-mm-dd - Titlu` |
|
| 12 |
+- noteaza decizia, motivul si efectul operational |
|
| 13 |
+- foloseste indexul acesta doar pentru orientare, nu pentru loguri lungi |
|
| 14 |
+ |
|
| 15 |
+## Componente |
|
| 16 |
+ |
|
| 17 |
+| Componenta | Log | Continut | |
|
| 18 |
+|------------|-----|----------| |
|
| 19 |
+| Architecture and scope | [`architecture.md`](development-logs/architecture.md) | scope produs, limite tehnice stabile, reguli generale de arhitectura | |
|
| 20 |
+| Database | [`database.md`](development-logs/database.md) | SQLite, schema runtime, seed, backup/restore, surse de adevar | |
|
| 21 |
+| Auth and login | [`auth-login.md`](development-logs/auth-login.md) | OTP, sesiuni, formulare de autentificare, compatibilitate autofill | |
|
| 22 |
+| Hosts view | [`hosts-view.md`](development-logs/hosts-view.md) | UI/API pentru registry, editari de hosturi, vhosturi, aliasuri | |
|
| 23 |
+| DNS | [`dns.md`](development-logs/dns.md) | manifest local DNS, resolver sync, reguli NXDOMAIN/wildcard | |
|
| 24 |
+| SSH | [`ssh.md`](development-logs/ssh.md) | profiluri SSH, acces operational, inventar de conectare | |
|
| 25 |
+| Work Orders | [`work-orders.md`](development-logs/work-orders.md) | schimbari operationale confirmabile, checklisturi, retrageri | |
|
| 26 |
+| Deployment and operations | [`deployment-operations.md`](development-logs/deployment-operations.md) | GitPrep, jumper, deploy, dependency policy, contract commit/push | |
|
| 27 |
+ |
|
| 28 |
+## Cronologie Recapitulativa |
|
| 29 |
+ |
|
| 30 |
+| Data | Decizie | Componenta | |
|
| 31 |
+|------|---------|------------| |
|
| 32 |
+| 2026-06-06 | Repository and Deployment Split | [Deployment and operations](development-logs/deployment-operations.md#2026-06-06---repository-and-deployment-split) | |
|
| 33 |
+| 2026-06-06 | Scope Expanded Beyond Host Registry | [Architecture and scope](development-logs/architecture.md#2026-06-06---scope-expanded-beyond-host-registry) | |
|
| 34 |
+| 2026-06-06 | Work Orders Before Destructive Registry Changes | [Work Orders](development-logs/work-orders.md#2026-06-06---work-orders-before-destructive-registry-changes) | |
|
| 35 |
+| 2026-06-06 | Local DNS Resolution Rules | [DNS](development-logs/dns.md#2026-06-06---local-dns-resolution-rules) | |
|
| 36 |
+| 2026-06-06 | Dependency Policy | [Deployment and operations](development-logs/deployment-operations.md#2026-06-06---dependency-policy) | |
|
| 37 |
+| 2026-06-06 | OTP Login Keeps a Password-Manager-Friendly Form Shape | [Auth and login](development-logs/auth-login.md#2026-06-06---otp-login-keeps-a-password-manager-friendly-form-shape) | |
|
| 38 |
+| 2026-06-08 | Commit and Push Is the Development Contract | [Deployment and operations](development-logs/deployment-operations.md#2026-06-08---commit-and-push-is-the-development-contract) | |
|
| 39 |
+| 2026-06-09 | SQLite Runtime Source of Truth | [Database](development-logs/database.md#2026-06-09---sqlite-runtime-source-of-truth) | |
|
| 40 |
+| 2026-06-09 | Relational Runtime Schema | [Database](development-logs/database.md#2026-06-09---relational-runtime-schema) | |
|
@@ -0,0 +1,22 @@ |
||
| 1 |
+# Architecture and Scope Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre scope-ul produsului, limite tehnice stabile si directia generala de arhitectura. |
|
| 4 |
+ |
|
| 5 |
+## 2026-06-06 - Scope Expanded Beyond Host Registry |
|
| 6 |
+ |
|
| 7 |
+Aplicatia a pornit ca manager pentru registrul de hosturi, dar scope-ul curent include: |
|
| 8 |
+ |
|
| 9 |
+- registry de hosturi Madagascar |
|
| 10 |
+- manifest DNS local pentru jumper si as01 |
|
| 11 |
+- Work Orders pentru schimbari operationale confirmabile |
|
| 12 |
+- autoritate locala de certificate pentru hosturi |
|
| 13 |
+- exporturi pentru servicii consumatoare, preferabil prin git |
|
| 14 |
+ |
|
| 15 |
+Numele de produs a devenit `Madagascar Local Authority`. |
|
| 16 |
+ |
|
| 17 |
+Numele tehnice raman stabile pentru compatibilitate: |
|
| 18 |
+ |
|
| 19 |
+- service systemd: `host-manager` |
|
| 20 |
+- user Unix: `host-manager` |
|
| 21 |
+- runtime path: `/usr/local/xdev-host-manager` |
|
| 22 |
+- environment file: `/etc/xdev/host-manager.env` |
|
@@ -0,0 +1,25 @@ |
||
| 1 |
+# Auth and Login Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre autentificare, OTP, sesiuni, formulare si compatibilitate cu password managere/autofill. |
|
| 4 |
+ |
|
| 5 |
+## 2026-06-06 - OTP Login Keeps a Password-Manager-Friendly Form Shape |
|
| 6 |
+ |
|
| 7 |
+Observatie: unele password managere si autofill-uri mobile nu initiau corect pe login-ul Madagascar Local Authority, desi completarea mergea pe o pagina similara din PBX management. |
|
| 8 |
+ |
|
| 9 |
+Diferente relevante observate pe pagina care functiona: |
|
| 10 |
+ |
|
| 11 |
+- formular clasic `method="post"` |
|
| 12 |
+- camp de cont cu `autocomplete="username"` |
|
| 13 |
+- camp unic pentru codul OTP, separat de cele 6 casute vizuale |
|
| 14 |
+ |
|
| 15 |
+Decizie: |
|
| 16 |
+ |
|
| 17 |
+- UI-ul ramane cu 6 casute OTP |
|
| 18 |
+- formularul include si campuri ajutatoare off-screen pentru `username` si OTP agregat |
|
| 19 |
+- JS sincronizeaza codul complet intre campul agregat si cele 6 casute |
|
| 20 |
+- formularul pastreaza `autocomplete="on"` la nivel de form, ca hint-urile specifice de pe campuri sa nu fie neutralizate |
|
| 21 |
+ |
|
| 22 |
+Scop: |
|
| 23 |
+ |
|
| 24 |
+- compatibilitate mai buna cu password managere si autofill mobil |
|
| 25 |
+- fara a complica interfata vizibila |
|
@@ -0,0 +1,43 @@ |
||
| 1 |
+# Database Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre SQLite, schema runtime, migrare, seed, backup/restore si sursele de adevar pentru date operationale. |
|
| 4 |
+ |
|
| 5 |
+## 2026-06-09 - SQLite Runtime Source of Truth |
|
| 6 |
+ |
|
| 7 |
+Observatie: editarile de hosts facute in aplicatia live puteau ramane in working tree-ul de pe jumper sau puteau fi suprascrise/confuzionate la push-ul de cod. Modelul vechi descria simultan `config/hosts.yaml` ca registry editabil in git si ca data operationala runtime, ceea ce nu era o sursa de adevar clara. |
|
| 8 |
+ |
|
| 9 |
+Decizie: |
|
| 10 |
+ |
|
| 11 |
+- `var/host-manager.sqlite` devine sursa de adevar runtime pentru registry si Work Orders |
|
| 12 |
+- `config/hosts.yaml` si `config/work-orders.yaml` raman seed/snapshot/export compatibility files |
|
| 13 |
+- la prima pornire, aplicatia seed-uieste documentele lipsa din YAML in SQLite |
|
| 14 |
+- download-urile `/download/hosts.yaml`, `/download/local-hosts.tsv` si `/download/monitoring.json` sunt randate din SQLite |
|
| 15 |
+- `config/local-hosts.tsv` ramane manifest generat explicit pentru sync-ul DNS local |
|
| 16 |
+- push-urile de cod catre jumper nu trebuie sa inlocuiasca baza runtime din `var/` |
|
| 17 |
+ |
|
| 18 |
+Scop: |
|
| 19 |
+ |
|
| 20 |
+- editarile facute in UI sa nu se piarda la deploy/push de cod |
|
| 21 |
+- sa existe o singura autoritate runtime |
|
| 22 |
+- YAML/TSV sa ramana utile pentru export, review si bootstrap fara sa fie storage-ul live |
|
| 23 |
+ |
|
| 24 |
+## 2026-06-09 - Relational Runtime Schema |
|
| 25 |
+ |
|
| 26 |
+Observatie: primul pas SQLite mutase sursa de adevar din git in baza de date, dar o pastra ca document YAML intr-o tabela generica. Asta rezolva pierderea editarilor la push, dar nu oferea o baza de date operationala reala. |
|
| 27 |
+ |
|
| 28 |
+Decizie: |
|
| 29 |
+ |
|
| 30 |
+- `hosts.fqdn` devine cheia reala pentru hosturi, ca numele complete sa evite coliziuni intre domenii |
|
| 31 |
+- `legacy_id` ramane doar compatibilitate pentru UI/API-ul curent |
|
| 32 |
+- aliasurile sunt pastrate in `host_aliases`, inclusiv dupa retragere |
|
| 33 |
+- vhosturile sunt in `vhosts` si pot fi mutate prin schimbarea `host_fqdn` |
|
| 34 |
+- rolurile, sursele, flagurile si SSH sunt in tabele separate, nu coloane adaugate continuu in `hosts` |
|
| 35 |
+- workerii de date au `data_workers`, `dhcp_leases` si `mdns_observations` |
|
| 36 |
+- certificatele emise au `certificates` si `certificate_dns_names` |
|
| 37 |
+- `documents` ramane doar tabel legacy pentru migrare din modelul vechi document-store |
|
| 38 |
+ |
|
| 39 |
+Scop: |
|
| 40 |
+ |
|
| 41 |
+- schema sa poata sustine inventar, DNS, vhosturi, observatii externe si certificate fara sa piarda istoric operational |
|
| 42 |
+- aliasurile/vhosturile retrase sa ramana audibile in baza de date |
|
| 43 |
+- structura sa fie extensibila fara sa supraincarce tabelul `hosts` |
|
@@ -0,0 +1,66 @@ |
||
| 1 |
+# Deployment and Operations Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre GitPrep, jumper, deploy, runtime paths, dependency policy si disciplina commit/push. |
|
| 4 |
+ |
|
| 5 |
+## 2026-06-06 - Repository and Deployment Split |
|
| 6 |
+ |
|
| 7 |
+Decizie: codul aplicatiei se dezvolta local si se publica in GitPrep. Jumper ramane runtime/deploy target. |
|
| 8 |
+ |
|
| 9 |
+Locatii: |
|
| 10 |
+ |
|
| 11 |
+- checkout local: `/Users/bogdan/Documents/Workspaces/Xdev/Madagascar/LocalAuthority` |
|
| 12 |
+- GitPrep canonical remote: `git@192.168.2.102:repositories/bogdan/LocalAuthority.git` |
|
| 13 |
+- GitPrep web: `http://192.168.2.102:3000/bogdan/LocalAuthority` |
|
| 14 |
+- runtime jumper: `/usr/local/xdev-host-manager` |
|
| 15 |
+ |
|
| 16 |
+Motiv: |
|
| 17 |
+ |
|
| 18 |
+- editarea directa pe jumper amesteca dezvoltarea cu runtime-ul |
|
| 19 |
+- aplicatia are acum scope mai mare si va continua sa evolueze |
|
| 20 |
+- avem nevoie de istoric, review si deploy controlat |
|
| 21 |
+ |
|
| 22 |
+Regula: |
|
| 23 |
+ |
|
| 24 |
+- `scripts/deploy_to_jumper.sh` publica aplicatia pe jumper |
|
| 25 |
+- `config/` nu se copiaza implicit |
|
| 26 |
+- `config/` se copiaza doar cu `--include-config`, la cerere explicita |
|
| 27 |
+ |
|
| 28 |
+## 2026-06-06 - Dependency Policy |
|
| 29 |
+ |
|
| 30 |
+Regula: nu se instaleaza npm, pip sau CPAN direct pe hosturi. |
|
| 31 |
+ |
|
| 32 |
+Acceptat: |
|
| 33 |
+ |
|
| 34 |
+- pachete din distributie, cand sunt necesare |
|
| 35 |
+- Perl din distributie |
|
| 36 |
+- module Perl core/distribution |
|
| 37 |
+ |
|
| 38 |
+CPAN se foloseste doar daca pachetul ajunge prin repo-ul local auditat. |
|
| 39 |
+ |
|
| 40 |
+Pachete de sistem instalate in timpul evolutiei: |
|
| 41 |
+ |
|
| 42 |
+- `ripgrep` pe jumper |
|
| 43 |
+- `rsync` pe jumper |
|
| 44 |
+- `sqlite` pe jumper |
|
| 45 |
+- `perl-DBD-SQLite` pe jumper |
|
| 46 |
+- `sqlite3` pe mazeri/GitPrep |
|
| 47 |
+ |
|
| 48 |
+## 2026-06-08 - Commit and Push Is the Development Contract |
|
| 49 |
+ |
|
| 50 |
+Observatie: schimbarile lasate mult timp ca dirty working tree se pierd usor in timpul deploy-urilor, reseturilor si schimbarilor de context. Pentru development, unitatea de lucru trebuie sa fie commit-ul local, nu un set de fisiere uitate in stare necomisa. |
|
| 51 |
+ |
|
| 52 |
+Decizie: |
|
| 53 |
+ |
|
| 54 |
+- se lucreaza cu commit-uri locale mici si coerente |
|
| 55 |
+- pentru test live, commit-ul se impinge in checkout-ul runtime de pe jumper cu `git push jumper-runtime HEAD:main` |
|
| 56 |
+- pentru arhivare si istoric canonic, acelasi commit se impinge in GitPrep cu `git push origin main` |
|
| 57 |
+- jumper ramane target de test live, nu locul principal de editare |
|
| 58 |
+- `scripts/deploy_to_jumper.sh` ramane unealta explicita de rsync deploy, dar nu inlocuieste disciplina commit/push |
|
| 59 |
+- `BUILD` ramane sursa vizibila pentru ce versiune ruleaza |
|
| 60 |
+ |
|
| 61 |
+Scop: |
|
| 62 |
+ |
|
| 63 |
+- niciun front de lucru sa nu ramana doar in fisiere dirty locale sau runtime |
|
| 64 |
+- testul live pe jumper sa fie legat de un commit identificabil |
|
| 65 |
+- GitPrep sa pastreze istoria canonica pentru arhivare si recuperare |
|
| 66 |
+- badge-ul de build si meta tag-ul `xdev-build` devin verificarea rapida pentru ce ruleaza |
|
@@ -0,0 +1,20 @@ |
||
| 1 |
+# DNS Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre manifestul DNS local, resolver sync, prioritatea surselor si regulile de rezolvare pentru `madagascar.xdev.ro`. |
|
| 4 |
+ |
|
| 5 |
+## 2026-06-06 - Local DNS Resolution Rules |
|
| 6 |
+ |
|
| 7 |
+Regula: local nu se foloseste wildcard pentru `*.madagascar.xdev.ro`. |
|
| 8 |
+ |
|
| 9 |
+Doar numele cunoscute din manifestul local trebuie sa se rezolve intern. Numele necunoscute trebuie sa intoarca `NXDOMAIN`, chiar daca DNS public poate avea wildcard catre IP-ul public. |
|
| 10 |
+ |
|
| 11 |
+Resolverele interne sunt: |
|
| 12 |
+ |
|
| 13 |
+- jumper: `192.168.2.100` |
|
| 14 |
+- as01: `192.168.2.2` |
|
| 15 |
+ |
|
| 16 |
+Sync-ul ramane explicit: |
|
| 17 |
+ |
|
| 18 |
+```bash |
|
| 19 |
+./scripts/sync_local_hosts.sh --apply --verify |
|
| 20 |
+``` |
|
@@ -0,0 +1,5 @@ |
||
| 1 |
+# Hosts View Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre UI/API pentru registry, editari de hosturi, aliasuri, vhosturi si experienta de operare in hosts view. |
|
| 4 |
+ |
|
| 5 |
+Nu exista inca intrari mutate aici din logul istoric. |
|
@@ -0,0 +1,5 @@ |
||
| 1 |
+# SSH Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre profiluri SSH, inventar de conectare, reguli de acces si folosirea datelor din `host_ssh`. |
|
| 4 |
+ |
|
| 5 |
+Nu exista inca intrari mutate aici din logul istoric. |
|
@@ -0,0 +1,23 @@ |
||
| 1 |
+# Work Orders Development Log |
|
| 2 |
+ |
|
| 3 |
+Decizii despre Work Orders, schimbari operationale confirmabile, checklisturi si actiuni cu impact asupra registry-ului. |
|
| 4 |
+ |
|
| 5 |
+## 2026-06-06 - Work Orders Before Destructive Registry Changes |
|
| 6 |
+ |
|
| 7 |
+Decizie: numele cu impact operational nu se sterg direct din UI. |
|
| 8 |
+ |
|
| 9 |
+Exemplu initial: |
|
| 10 |
+ |
|
| 11 |
+- `pmx.*.madagascar.xdev.ro` |
|
| 12 |
+- `pbs.*.madagascar.xdev.ro` |
|
| 13 |
+ |
|
| 14 |
+Aceste nume au fost create pentru vhosturi nginx cu certificate Let's Encrypt. Odata cu CA-ul local, intentia este retragerea lor, dar eliminarea din registry se face doar dupa: |
|
| 15 |
+ |
|
| 16 |
+- inventarierea vhosturilor |
|
| 17 |
+- crearea si instalarea certificatelor locale |
|
| 18 |
+- eliminarea configuratiilor legacy |
|
| 19 |
+- testarea accesului prin numele canonice |
|
| 20 |
+- verificarea ca numele nu mai sunt folosite |
|
| 21 |
+- aprobarea finala a operatorului |
|
| 22 |
+ |
|
| 23 |
+Confirmarea unui WO este blocata daca checklist-ul nu este complet. |
|
@@ -4,7 +4,7 @@ Madagascar Local Authority este o aplicație web locală, Perl-only, pentru regi |
||
| 4 | 4 |
|
| 5 | 5 |
Numele de produs este `Madagascar Local Authority`. Numele tehnic al serviciului, userului Unix, path-ului și fișierelor de environment rămâne `host-manager`. |
| 6 | 6 |
|
| 7 |
-Pentru deciziile de evoluție și schimbările de scope, vezi `.doc/development-log.md`. |
|
| 7 |
+Pentru deciziile de evoluție și schimbările de scope, vezi indexul `.doc/development-log.md` și logurile pe componente din `.doc/development-logs/`. |
|
| 8 | 8 |
|
| 9 | 9 |
## Politica de dependențe |
| 10 | 10 |
|
@@ -42,7 +42,7 @@ For agent/operator context, see: |
||
| 42 | 42 |
|
| 43 | 43 |
- [`agents.md`](agents.md) |
| 44 | 44 |
- [`.doc/database/`](.doc/database/README.md) |
| 45 |
-- [`.doc/development-log.md`](.doc/development-log.md) |
|
| 45 |
+- [`.doc/development-log.md`](.doc/development-log.md) - index pentru development logs pe componente |
|
| 46 | 46 |
- [`.doc/host-manager.md`](.doc/host-manager.md) |
| 47 | 47 |
- [`.doc/local-hosts.md`](.doc/local-hosts.md) |
| 48 | 48 |
|
@@ -8,7 +8,7 @@ Start with these documents: |
||
| 8 | 8 |
- [.doc/database/](.doc/database/README.md) - SQLite runtime store schema, table docs, seed rules, backup and restore. |
| 9 | 9 |
- [.doc/host-manager.md](.doc/host-manager.md) - application behavior, OTP, Work Orders, local CA, registry rules. |
| 10 | 10 |
- [.doc/local-hosts.md](.doc/local-hosts.md) - local DNS rules, resolver sync, source priority. |
| 11 |
-- [.doc/development-log.md](.doc/development-log.md) - scope and architecture decisions over time. |
|
| 11 |
+- [.doc/development-log.md](.doc/development-log.md) - development log index with component logs under `.doc/development-logs/`. |
|
| 12 | 12 |
|
| 13 | 13 |
Operational rules: |
| 14 | 14 |
|