docs: map msglib dotnet wrapper path

This commit is contained in:
zhaoyilun
2026-07-10 02:29:36 +08:00
parent 7ced6e45f6
commit 8378935c90
4 changed files with 184 additions and 16 deletions

View File

@@ -1972,12 +1972,12 @@ Evidence precheck result:
**Goal:** Statically inspect the extracted DB wrapper assemblies to map candidate table/model names and connection-string/password/decryption flow for future read-only `MsgLib.db` access.
**Planned files:**
**Files:**
- Modify: `docs/source-discovery/capability-source-matrix.md`
- Modify: `docs/current-status-card.md`
- Modify: `docs/superpowers/plans/2026-07-09-stage-c-log-backed-receive-messages-loop.md`
- Optionally create a focused source-discovery note under `docs/source-discovery/`.
- Optionally create ignored metadata under `runs/`; do not commit binaries, raw DB bytes, decrypted content, or personal values.
- Create: `docs/source-discovery/2026-07-10-dotnet-wrapper-static-analysis.md`
- Ignored metadata under `runs/offline-evidence-intake/zyl-qqfile-20260709/metadata/`; no binaries, raw DB bytes, decrypted content, or personal values are committed.
**Planned behavior:**
- Inspect .NET assembly metadata/IL read-only for:
@@ -1986,20 +1986,26 @@ Evidence precheck result:
- `Utilities.Lib.DBModel.dll`
- `Utilities.Lib.DBSQLite.dll`
- `RepairDatabase.exe`
- Include direct dependency IL only when needed to resolve model fields and connection flow.
- Extract only table/model/method/property names and connection/decryption flow summaries.
- Decide whether C26 can attempt copied-DB read-only schema extraction or must stay blocked.
- Do not execute client binaries or modify DB files.
- Do not add write/send/file-download behavior.
- [ ] **Step 1: Generate static wrapper metadata**
- [x] **Step 1: Generate static wrapper metadata**
Use read-only metadata/IL tools or string extraction. Keep output under ignored metadata.
Generated IL and structured ignored metadata with `ildasm`/Python under:
- [ ] **Step 2: Write source-discovery conclusion**
```text
runs/offline-evidence-intake/zyl-qqfile-20260709/metadata/c25-il/
runs/offline-evidence-intake/zyl-qqfile-20260709/metadata/c25-wrapper-il-summary.json
```
Record likely tables/models and the safest next read path.
- [x] **Step 2: Write source-discovery conclusion**
- [ ] **Step 3: Verify and commit docs**
Created `docs/source-discovery/2026-07-10-dotnet-wrapper-static-analysis.md` with recovered connection/password flow and target table/model mapping.
- [x] **Step 3: Verify and commit docs**
Run:
@@ -2013,6 +2019,68 @@ Expected: all exit 0. Commit exact C25 paths only and rewrite the next loop from
---
## Loop C25 Result
Static wrapper analysis result:
- `HYHC.IMPP.DAL.IMPPDAL` configures the DB through `Utilities.Lib.DBModel.Config.DBConfigElement` with `DBID = 0x1a0a`, `DBConInfoType = 1`, `DatabaseName = dbPath`, `Password = "123"`, and `DBFactory = "Utilities.Lib.DBSQLite.Core.SQLiteDBFactory,Utilities.Lib.DBSQLite"`.
- `Utilities.Lib.DBBase.Base.DBInteractionBase.GetDBConStr(...)` chooses between direct `ConStr`, generated connection string, or an `IConStrDecryption` implementation. The observed DAL path uses generated SQLite connection strings rather than the earlier log DES policy.
- `Utilities.Lib.SQLiteInteraction.Interaction.GenerateDBConStr(...)` builds a `System.Data.SQLite.SQLiteConnectionStringBuilder`, sets `DataSource`, sets `Password` when present, forces `ReadOnly = true`, and returns the connection string. `GetConnection(...)` then creates `System.Data.SQLite.SQLiteConnection`.
- Candidate schema sources are now mapped:
- contact/display names: `TD_Roster`, `tblRecent`, `tblChatLevel`, `tblPersonMsg`;
- group/display/member names: `tblMsgGroupPersonMsg`, `TD_WorkGroupAuth`, `tblRecent`;
- receive messages: `tblPersonMsg`, `tblMsgGroupPersonMsg`;
- file metadata: `tblRecvFile` and file-message rows in message tables.
- Decision: C26 can attempt copied-DB read-only schema extraction using the bundled `System.Data.SQLite.dll` and the recovered wrapper password. It must query schema/counts only before any DB-backed feature implementation.
---
## Loop C26: Copied `MsgLib.db` read-only schema extraction
**Goal:** Validate whether copied `MsgLib.db` files can be opened read-only through the recovered wrapper connection flow, then extract schema/table/column metadata only.
**Planned files:**
- Modify: `docs/source-discovery/capability-source-matrix.md`
- Modify: `docs/current-status-card.md`
- Modify: `docs/superpowers/plans/2026-07-09-stage-c-log-backed-receive-messages-loop.md`
- Create: `docs/source-discovery/2026-07-10-msglib-readonly-schema-extraction.md` if the probe yields non-trivial evidence.
- Ignored metadata under `runs/offline-evidence-intake/zyl-qqfile-20260709/metadata/`; do not commit DBs, raw rows, message bodies, personal values, or helper binaries.
**Planned behavior:**
- Use copied DB candidates under `runs/offline-evidence-intake/zyl-qqfile-20260709/extracted/msgdb-*` only.
- Use the bundled `System.Data.SQLite.dll` from the extracted iSphere client files.
- Open with the recovered wrapper path equivalent: `Data Source=<copy>;Password=123;Read Only=True;Pooling=False`.
- Query only `sqlite_master`, `PRAGMA table_info(...)`, and safe row counts for target tables.
- Save schema metadata under ignored `runs/.../metadata/`.
- If direct bundled `System.Data.SQLite` open fails, record the exact exception and plan the next wrapper-assisted schema probe.
- Do not add write/send/file-download behavior.
- [ ] **Step 1: Build a read-only schema probe**
Create a temporary/ignored probe that references the bundled SQLite assembly and opens copied DB files read-only with password `123`.
- [ ] **Step 2: Extract schema-only metadata**
Collect table names, column names/types, and safe row counts for candidate business tables. Do not dump message/contact/file rows.
- [ ] **Step 3: Record conclusion and next implementation slice**
If schema open succeeds, write C27 as DB-backed contact/group display-name enrichment or DB-backed receive-message source design. If schema open fails, write C27 as wrapper-assisted open diagnosis.
- [ ] **Step 4: Verify and commit docs**
Run:
```powershell
git diff --check
go test ./...
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/verify-go-mcp.ps1
```
Expected: all exit 0. Commit exact C26 docs only and rewrite the next loop from actual results.
---
## Self-Review
- Spec coverage: the plan follows the user's cyclic requirement: plan first, implement one loop at a time, update the next loop after each result, and ask only on blockers.