@mindflight/mindbrain-personal-studio 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/README.md +16 -8
  2. package/build/client/_app/immutable/chunks/{D0UIlUGZ.js → CIErFlYG.js} +1 -1
  3. package/build/client/_app/immutable/chunks/CIErFlYG.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/CIErFlYG.js.gz +0 -0
  5. package/build/client/_app/immutable/entry/{app.CR-imLox.js → app.mURYm8o_.js} +2 -2
  6. package/build/client/_app/immutable/entry/app.mURYm8o_.js.br +0 -0
  7. package/build/client/_app/immutable/entry/app.mURYm8o_.js.gz +0 -0
  8. package/build/client/_app/immutable/entry/start.D4M9ZeGO.js +1 -0
  9. package/build/client/_app/immutable/entry/start.D4M9ZeGO.js.br +2 -0
  10. package/build/client/_app/immutable/entry/start.D4M9ZeGO.js.gz +0 -0
  11. package/build/client/_app/immutable/nodes/{1.CTEedoSY.js → 1.DHKtMeFI.js} +1 -1
  12. package/build/client/_app/immutable/nodes/1.DHKtMeFI.js.br +1 -0
  13. package/build/client/_app/immutable/nodes/1.DHKtMeFI.js.gz +0 -0
  14. package/build/client/_app/version.json +1 -1
  15. package/build/client/_app/version.json.br +0 -0
  16. package/build/client/_app/version.json.gz +0 -0
  17. package/build/handler.js +4 -4
  18. package/build/index.js +4 -4
  19. package/build/server/chunks/chunks/{internal.js-WOmQXGMa.js → internal.js-C3tV0XXj.js} +2 -2
  20. package/build/server/chunks/chunks/{internal.js-WOmQXGMa.js.map → internal.js-C3tV0XXj.js.map} +1 -1
  21. package/build/server/chunks/{handler-BIDedSZq.js → handler-DlaCCnxx.js} +3 -3
  22. package/build/server/chunks/{handler-BIDedSZq.js.map → handler-DlaCCnxx.js.map} +1 -1
  23. package/build/server/chunks/{index.js-YVPJa0so.js → index.js-BGfKWHak.js} +2 -2
  24. package/build/server/chunks/{index.js-YVPJa0so.js.map → index.js-BGfKWHak.js.map} +1 -1
  25. package/build/server/chunks/{manifest.js-aGRKuiqF.js → manifest.js-CnmaNf5D.js} +3 -3
  26. package/build/server/chunks/{manifest.js-aGRKuiqF.js.map → manifest.js-CnmaNf5D.js.map} +1 -1
  27. package/build/server/chunks/nodes/{1.js-Dhh3ErZY.js → 1.js-BypjwBYB.js} +2 -2
  28. package/build/server/chunks/nodes/{1.js-Dhh3ErZY.js.map → 1.js-BypjwBYB.js.map} +1 -1
  29. package/examples/immeuble/ACCEPTANCE.yaml +82 -0
  30. package/examples/immeuble/BIM_LITE.md +15 -0
  31. package/examples/immeuble/CHECKLIST.md +128 -0
  32. package/examples/immeuble/README.md +121 -0
  33. package/examples/immeuble/bundle/immeuble.bundle.json +22786 -0
  34. package/examples/immeuble/contracts/answer_artifacts.seed.jsonl +34 -0
  35. package/examples/immeuble/contracts/business_capabilities.seed.jsonl +25 -0
  36. package/examples/immeuble/contracts/consumer_contract.yaml +131 -0
  37. package/examples/immeuble/contracts/immeuble_structured_import_model.json +310 -0
  38. package/examples/immeuble/contracts/mapping_external_to_canonical.json +375 -0
  39. package/examples/immeuble/contracts/mapping_external_to_canonical.yaml +55 -0
  40. package/examples/immeuble/contracts/mapping_external_to_canonical_ws.json +65 -0
  41. package/examples/immeuble/contracts/model_contract.json +943 -0
  42. package/examples/immeuble/contracts/projection_catalog.yaml +366 -0
  43. package/examples/immeuble/contracts/scenarios.yaml +27 -0
  44. package/examples/immeuble/contracts/semantic_proposal.golden.json +1 -0
  45. package/examples/immeuble/contracts/source_profile.yaml +38 -0
  46. package/examples/immeuble/fake_data/DeltaFinding.csv +20 -0
  47. package/examples/immeuble/fake_data/ProjectionResult.csv +13 -0
  48. package/examples/immeuble/fake_data/ag_meeting.csv +4 -0
  49. package/examples/immeuble/fake_data/agenda_item.csv +4 -0
  50. package/examples/immeuble/fake_data/architect.csv +3 -0
  51. package/examples/immeuble/fake_data/architecture_firm.csv +2 -0
  52. package/examples/immeuble/fake_data/bank_account.csv +3 -0
  53. package/examples/immeuble/fake_data/billing_group.csv +41 -0
  54. package/examples/immeuble/fake_data/block.csv +10 -0
  55. package/examples/immeuble/fake_data/budget_line.csv +3 -0
  56. package/examples/immeuble/fake_data/building.csv +6 -0
  57. package/examples/immeuble/fake_data/cellar.csv +41 -0
  58. package/examples/immeuble/fake_data/change_order.csv +2 -0
  59. package/examples/immeuble/fake_data/charge_call.csv +58 -0
  60. package/examples/immeuble/fake_data/claim.csv +4 -0
  61. package/examples/immeuble/fake_data/coda_entry.csv +49 -0
  62. package/examples/immeuble/fake_data/compliance_certificate.csv +10 -0
  63. package/examples/immeuble/fake_data/contractor.csv +4 -0
  64. package/examples/immeuble/fake_data/decision.csv +5 -0
  65. package/examples/immeuble/fake_data/defect_reserve.csv +3 -0
  66. package/examples/immeuble/fake_data/household.csv +41 -0
  67. package/examples/immeuble/fake_data/inspection.csv +3 -0
  68. package/examples/immeuble/fake_data/insurance_policy.csv +4 -0
  69. package/examples/immeuble/fake_data/intervention.csv +13 -0
  70. package/examples/immeuble/fake_data/invoice.csv +3 -0
  71. package/examples/immeuble/fake_data/lease_contract.csv +12 -0
  72. package/examples/immeuble/fake_data/maintenance_ticket.csv +13 -0
  73. package/examples/immeuble/fake_data/meter.csv +4 -0
  74. package/examples/immeuble/fake_data/meter_reading.csv +19 -0
  75. package/examples/immeuble/fake_data/milestone.csv +3 -0
  76. package/examples/immeuble/fake_data/organization.csv +12 -0
  77. package/examples/immeuble/fake_data/parking_space.csv +8 -0
  78. package/examples/immeuble/fake_data/permit.csv +3 -0
  79. package/examples/immeuble/fake_data/person.csv +85 -0
  80. package/examples/immeuble/fake_data/private_garden.csv +7 -0
  81. package/examples/immeuble/fake_data/progress_event.csv +2 -0
  82. package/examples/immeuble/fake_data/quote.csv +3 -0
  83. package/examples/immeuble/fake_data/receipt.csv +2 -0
  84. package/examples/immeuble/fake_data/reminder.csv +11 -0
  85. package/examples/immeuble/fake_data/service_contract.csv +4 -0
  86. package/examples/immeuble/fake_data/shared_equipment.csv +8 -0
  87. package/examples/immeuble/fake_data/shared_space.csv +10 -0
  88. package/examples/immeuble/fake_data/unit.csv +41 -0
  89. package/examples/immeuble/fake_data/work_package.csv +4 -0
  90. package/examples/immeuble/fake_data/worksite_project.csv +3 -0
  91. package/examples/immeuble/gap-rules/L0-patrimoine.json +57 -0
  92. package/examples/immeuble/gap-rules/L1-syndic-naive.json +36 -0
  93. package/examples/immeuble/gap-rules/L1-syndic.json +61 -0
  94. package/examples/immeuble/gap-rules/L2-chantier.json +87 -0
  95. package/examples/immeuble/gap-rules/L2-exploitation.json +87 -0
  96. package/examples/immeuble/gap-rules/L2-finance.json +48 -0
  97. package/examples/immeuble/gap-rules/L2-maintenance.json +107 -0
  98. package/examples/immeuble/gap-rules/L2-syndic-filtered.json +39 -0
  99. package/examples/immeuble/gap-rules/L3-full.json +332 -0
  100. package/examples/immeuble/gap-rules/closed-world-contract.md +76 -0
  101. package/examples/immeuble/gap-rules/demo.json +51 -0
  102. package/examples/immeuble/gap-rules/expected-findings.yaml +100 -0
  103. package/examples/immeuble/gap-rules/gap-scenarios.yaml +79 -0
  104. package/examples/immeuble/gap-rules/motifs.json +38 -0
  105. package/examples/immeuble/gap-rules/syndic.json +40 -0
  106. package/examples/immeuble/import_manifest.yaml +25 -0
  107. package/examples/immeuble/import_ready/graph_edges_import.csv +848 -0
  108. package/examples/immeuble/import_ready/mfo_facets_import.csv +559 -0
  109. package/examples/immeuble/index.md +140 -0
  110. package/examples/immeuble/model/immeuble_model.json +418 -0
  111. package/examples/immeuble/reports/01-model.validation.json +56 -0
  112. package/examples/immeuble/reports/02-mapping.validation.json +9 -0
  113. package/examples/immeuble/reports/acceptance.validation.json +161 -0
  114. package/examples/immeuble/reports/consumer_contract.validation.json +162 -0
  115. package/examples/immeuble/reports/graph_edges.jsonl +847 -0
  116. package/examples/immeuble/reports/graph_nodes.jsonl +558 -0
  117. package/examples/immeuble/reports/hybrid-compare.json +144 -0
  118. package/examples/immeuble/reports/immeuble-import-scenario.json +233 -0
  119. package/examples/immeuble/reports/live-artifacts-refresh.validation.json +51 -0
  120. package/examples/immeuble/reports/pipeline_audit.json +59 -0
  121. package/examples/immeuble/reports/projection_audit.json +69 -0
  122. package/examples/immeuble/reports/projection_audit_immeuble.json +257 -0
  123. package/examples/immeuble/reports/projection_audit_immeuble.md +122 -0
  124. package/examples/immeuble/reports/projection_candidates.json +1596 -0
  125. package/examples/immeuble/reports/projection_candidates.md +117 -0
  126. package/examples/immeuble/reports/projection_model_validation.md +115 -0
  127. package/examples/immeuble/reports/reindex.json +4 -0
  128. package/examples/immeuble/reports/reset-immeuble-workspace.json +32 -0
  129. package/examples/immeuble/reports/schema-id-prefix-check.json +5 -0
  130. package/examples/immeuble/scripts/audit-immeuble-projections.mjs +254 -0
  131. package/examples/immeuble/scripts/build-immeuble-model.mjs +308 -0
  132. package/examples/immeuble/scripts/compare-immeuble-snapshots.sh +227 -0
  133. package/examples/immeuble/scripts/enrich-immeuble-demo.mjs +1135 -0
  134. package/examples/immeuble/scripts/reset-immeuble-workspace.mjs +139 -0
  135. package/examples/immeuble/scripts/run-immeuble-backend.sh +164 -0
  136. package/examples/immeuble/scripts/run-immeuble-import.mjs +232 -0
  137. package/examples/immeuble/scripts/run-immeuble-live-lab.sh +439 -0
  138. package/examples/immeuble/scripts/seed-immeuble-gap-rules.mjs +69 -0
  139. package/examples/immeuble/scripts/start-immeuble-demo.sh +52 -0
  140. package/examples/immeuble/scripts/starterkit/analysis-lenses.mjs +181 -0
  141. package/examples/immeuble/scripts/starterkit/analyze-projection-candidates.mjs +714 -0
  142. package/examples/immeuble/scripts/starterkit/audit-ghostcrab-projections.mjs +674 -0
  143. package/examples/immeuble/scripts/starterkit/facet-prefix.mjs +166 -0
  144. package/examples/immeuble/scripts/starterkit/sqlite-utils.mjs +131 -0
  145. package/examples/immeuble/scripts/verify-immeuble-acceptance.mjs +284 -0
  146. package/examples/immeuble/scripts/verify-immeuble-live-artifacts.mjs +140 -0
  147. package/examples/immeuble/scripts/yaml-lite.mjs +96 -0
  148. package/examples/immeuble/sources/agent-prompts/prompts/00-prerequisites-immo-mcp.md +161 -0
  149. package/examples/immeuble/sources/agent-prompts/prompts/00-prerequisites.md +39 -0
  150. package/examples/immeuble/sources/agent-prompts/prompts/01-discovery-and-model-proposal.md +42 -0
  151. package/examples/immeuble/sources/agent-prompts/prompts/02-ontology-register.md +44 -0
  152. package/examples/immeuble/sources/agent-prompts/prompts/03-gap-rules-design.md +44 -0
  153. package/examples/immeuble/sources/agent-prompts/prompts/04-document-ingest.md +40 -0
  154. package/examples/immeuble/sources/agent-prompts/prompts/05-graph-extraction.md +44 -0
  155. package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare-immo-mcp.md +109 -0
  156. package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare-test-immo-mcp3.md +30 -0
  157. package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare.md +63 -0
  158. package/examples/immeuble/sources/checklists/gap-rules-checklist.md +42 -0
  159. package/examples/immeuble/sources/checklists/ontology-checklist.md +54 -0
  160. package/examples/immeuble/sources/documents/README.md +42 -0
  161. package/examples/immeuble/sources/documents/annexes-caves-garages-jardins.md +8 -0
  162. package/examples/immeuble/sources/documents/annexes-jardins-garages.md +1 -0
  163. package/examples/immeuble/sources/documents/baux-erables.md +1 -0
  164. package/examples/immeuble/sources/documents/baux-locatifs.md +11 -0
  165. package/examples/immeuble/sources/documents/coda-janvier-2026.md +10 -0
  166. package/examples/immeuble/sources/documents/composition-menages.md +1 -0
  167. package/examples/immeuble/sources/documents/composition-occupants.md +18 -0
  168. package/examples/immeuble/sources/documents/expected-coverage.json +70 -0
  169. package/examples/immeuble/sources/documents/extrait-coda-janvier-2026.md +1 -0
  170. package/examples/immeuble/sources/documents/groupes-facturation.md +30 -0
  171. package/examples/immeuble/sources/documents/manifest.json +79 -0
  172. package/examples/immeuble/sources/documents/note-architecte-chantier-erables.md +3 -0
  173. package/examples/immeuble/sources/documents/permis-urbanisme-erables.md +3 -0
  174. package/examples/immeuble/sources/documents/procedures-operationnelles.md +3 -0
  175. package/examples/immeuble/sources/documents/pv-ag-budget-2026.md +1 -0
  176. package/examples/immeuble/sources/documents/pv-reception-reserves-erables.md +3 -0
  177. package/examples/immeuble/sources/documents/registre-coproprietaires.md +24 -0
  178. package/examples/immeuble/sources/documents/reglement-copropriete-tilleuls.md +1 -0
  179. package/examples/immeuble/sources/documents/statuts-erables.md +22 -0
  180. package/examples/immeuble/sources/documents/statuts-tilleuls.md +19 -0
  181. package/examples/immeuble/sources/documents/succession-jean-dupont.md +3 -0
  182. package/examples/immeuble/sources/documents/titre-propriete-tilleuls-a3.md +1 -0
  183. package/examples/immeuble/sources/documents/trous-pedagogiques.md +3 -0
  184. package/examples/immeuble/sources/ontology/README.md +1 -0
  185. package/examples/immeuble/sources/ontology/core.yaml +444 -0
  186. package/examples/immeuble/success-criteria.yaml +35 -0
  187. package/fixtures/immeuble-demo.sqlite +0 -0
  188. package/package.json +11 -2
  189. package/scripts/lib/sqlite-runtime.mjs +1 -1
  190. package/scripts/load-immeuble-demo.sh +103 -0
  191. package/scripts/seed-immeuble-projections.mjs +75 -148
  192. package/scripts/verify-immeuble-demo-sources.mjs +93 -0
  193. package/scripts/verify-immeuble-demo.mjs +69 -0
  194. package/build/client/_app/immutable/chunks/D0UIlUGZ.js.br +0 -0
  195. package/build/client/_app/immutable/chunks/D0UIlUGZ.js.gz +0 -0
  196. package/build/client/_app/immutable/entry/app.CR-imLox.js.br +0 -0
  197. package/build/client/_app/immutable/entry/app.CR-imLox.js.gz +0 -0
  198. package/build/client/_app/immutable/entry/start.DV-AjeAB.js +0 -1
  199. package/build/client/_app/immutable/entry/start.DV-AjeAB.js.br +0 -2
  200. package/build/client/_app/immutable/entry/start.DV-AjeAB.js.gz +0 -0
  201. package/build/client/_app/immutable/nodes/1.CTEedoSY.js.br +0 -0
  202. package/build/client/_app/immutable/nodes/1.CTEedoSY.js.gz +0 -0
@@ -0,0 +1,109 @@
1
+ # Validate and compare — workspace `immo-mcp`
2
+
3
+ **Phase 6 — compare MCP reconstruction vs golden reference (same SQLite, two workspaces).**
4
+
5
+ Adapted from [`06-validate-and-compare.md`](06-validate-and-compare.md).
6
+
7
+ ## Two workspaces, one SQLite file
8
+
9
+ Cursor MCP (`.cursor/mcp.json`) uses a **single** database:
10
+
11
+ ```text
12
+ /home/dlamotte/Documents/ghostcrab-personal-mcp/data/ghostcrab.sqlite
13
+ ```
14
+
15
+ | Workspace | Role | How it is populated |
16
+ |-----------|------|---------------------|
17
+ | **`immo-mcp`** | **Process** — what GhostCrab MCP built from the 8 corpus docs (phases 2–5) | Agent + CLI on this workspace only |
18
+ | **`immeuble`** | **Reference** — expected golden snapshot | Load `bundle/immeuble.bundle.json` **once** for comparison (never into `immo-mcp`) |
19
+
20
+ ```mermaid
21
+ flowchart TB
22
+ subgraph sameDb ["ghostcrab.sqlite (MCP --db)"]
23
+ ImmoMCP["workspace immo-mcp\n=MCP lab result"]
24
+ Golden["workspace immeuble\n=bundle.json golden"]
25
+ end
26
+ Corpus[corpus 8 md] --> ImmoMCP
27
+ Bundle[bundle/immeuble.bundle.json] --> Golden
28
+ ImmoMCP --> Compare[Phase 6 diff]
29
+ Golden --> Compare
30
+ Criteria[contracts/success-criteria.yaml] --> Compare
31
+ ```
32
+
33
+ ## Pre-step — load golden (human or agent, before compare)
34
+
35
+ Same `--db` as MCP. **Do not** change SQLite file between workspaces.
36
+
37
+ ```bash
38
+ export GHOSTCRAB_SQLITE_PATH="/home/dlamotte/Documents/ghostcrab-personal-mcp/data/ghostcrab.sqlite"
39
+
40
+ node bin/gcp.mjs load examples/immeuble/bundle/immeuble.bundle.json \
41
+ --workspace immeuble \
42
+ --reindex all \
43
+ --db "$GHOSTCRAB_SQLITE_PATH"
44
+ ```
45
+
46
+ ## Tools
47
+
48
+ - `ghostcrab_graph_diagnostics` (workspace_id per side)
49
+ - `ghostcrab_graph_search` / `ghostcrab_graph_gap_rules`
50
+ - `ghostcrab_count` / `ghostcrab_combined_search` where useful
51
+ - Optional: `ghostcrab_tool_search` → extended graph tools
52
+
53
+ Pass `workspace_id` explicitly on every call (`immo-mcp` vs `immeuble`).
54
+
55
+ ## Agent prompt (copy-paste)
56
+
57
+ ```text
58
+ Phase 6 — compare MCP lab result vs golden (same SQLite, two workspaces).
59
+
60
+ SQLite: /home/dlamotte/Documents/ghostcrab-personal-mcp/data/ghostcrab.sqlite
61
+ Process workspace: immo-mcp (what we built from corpus)
62
+ Reference workspace: immeuble (bundle.json golden — load if missing)
63
+
64
+ 1. Confirm `immeuble` is loaded. If graph_entity count is 0, stop and ask human to run bundle load (see 06-validate-and-compare-immo-mcp.md).
65
+
66
+ 2. On immo-mcp — run checks from `success-criteria.yaml`:
67
+ - entity counts (buildings=2, units=13, cellars=13, lease_contracts=5, coda_entries=3, …)
68
+ - ghostcrab_graph_search query "appartement" (≥13)
69
+ - ghostcrab_graph_diagnostics ontology immeuble::core → missing_required_relations ≤ 0
70
+
71
+ 3. On immeuble — same counts (sanity: golden should match criteria).
72
+
73
+ 4. Comparison table — immo-mcp vs immeuble vs success-criteria thresholds:
74
+ | Metric | criteria | immo-mcp | immeuble | immo-mcp OK? |
75
+
76
+ 5. Drill-down max 3 gaps on immo-mcp (traverse / graph_search).
77
+
78
+ Deliverable: markdown report with pass/fail on immo-mcp; immeuble is the expected column, not the process under test.
79
+ ```
80
+
81
+ ## Report template
82
+
83
+ ```markdown
84
+ # Immeuble MCP lab — comparison report (immo-mcp)
85
+
86
+ ## Summary
87
+ - Status: pass | fail
88
+ - SQLite: ghostcrab.sqlite (Cursor MCP --db)
89
+ - Process workspace: immo-mcp
90
+ - Reference workspace: immeuble (bundle golden)
91
+
92
+ ## Entity counts
93
+ | type | criteria | immo-mcp | immeuble | immo-mcp ok |
94
+
95
+ ## Relation / search / diagnostics
96
+ | check | criteria | immo-mcp | immeuble | immo-mcp ok |
97
+
98
+ ## Gaps on immo-mcp (max 3)
99
+ 1. …
100
+ ```
101
+
102
+ ## Rules
103
+
104
+ - **Never** load `bundle.json` into workspace `immo-mcp`.
105
+ - `success-criteria.yaml` thresholds apply to **`immo-mcp`**; `immeuble` is the structural reference column.
106
+
107
+ ## Done
108
+
109
+ Lab complete when `immo-mcp` meets `success-criteria.yaml` thresholds (or gaps documented with remediation).
@@ -0,0 +1,30 @@
1
+ # Validate and compare — workspace `test-immo-mcp3`
2
+
3
+ **Phase 6 — compare MCP lab retry vs golden reference (same SQLite, two workspaces).**
4
+
5
+ Baseline report: `../reports/06-compare-test-immo-mcp2.md`.
6
+
7
+ ## Workspaces
8
+
9
+ | Workspace | Role |
10
+ |-----------|------|
11
+ | **`test-immo-mcp3`** | Process — 9 corpus docs, live extract, no bundle |
12
+ | **`immeuble`** | Reference — golden bundle |
13
+
14
+ ## Agent prompt (copy-paste)
15
+
16
+ ```
17
+ Phase 6 — compare test-immo-mcp3 vs immeuble vs success-criteria.yaml.
18
+
19
+ SQLite: /home/dlamotte/Documents/ghostcrab-personal-mcp/data/ghostcrab.sqlite
20
+ Process: test-immo-mcp3 (9 docs including groupes-facturation.md)
21
+ Reference: immeuble
22
+
23
+ Checks:
24
+ - Entity counts vs success-criteria.yaml core + golden_stretch (billing_group, shared_space)
25
+ - ghostcrab_graph_search "appartement" ≥ 13
26
+ - ghostcrab_graph_diagnostics ontology test-immo-mcp3::core → missing_required_relations ≤ 0
27
+ - Document gaps: billing_group, shared_space, edge vocabulary
28
+
29
+ Deliverable: reports/06-compare-test-immo-mcp3.md
30
+ ```
@@ -0,0 +1,63 @@
1
+ # Validate and compare
2
+
3
+ **Phase 6 — compare LLM workspace against reference (controlled parity).**
4
+
5
+ ## Tools
6
+
7
+ - `ghostcrab_graph_diagnostics`
8
+ - `ghostcrab_graph_search`
9
+ - `ghostcrab_traverse`
10
+ - `ghostcrab_count` (if available)
11
+
12
+ ## Agent prompt
13
+
14
+ ```
15
+ Compare le workspace `immeuble` contre les seuils dans `examples/immeuble/success-criteria.yaml`
16
+ et la référence `examples/immeuble/bundle/immeuble.bundle.json` (workspace immeuble).
17
+
18
+ Checks :
19
+ 1. Entity counts par type (buildings=2, units=13, cellars=13, lease_contracts=5, …)
20
+ 2. Relation counts par edge_type (contains, owns, occupies, leases, assigned_cellar, …)
21
+ 3. Quotités = 1000 par immeuble
22
+ 4. graph_search : appartement (≥13), Dupont, bail, CODA, jardin
23
+ 5. ghostcrab_graph_diagnostics avec `examples/immeuble/gap-rules/L2-syndic-filtered.json`
24
+ (adapter workspace_id à `immeuble`) → missing_required_relations ≤ 0 si graphe complet
25
+
26
+ Rapport markdown :
27
+ | Check | Expected | Actual | Status (OK/GAP/FP) |
28
+ Drill-down traverse sur max 3 écarts.
29
+ ```
30
+
31
+ ## Report template
32
+
33
+ ```markdown
34
+ # Immeuble MCP lab — comparison report
35
+
36
+ ## Summary
37
+ - Status: pass | fail
38
+ - Workspace: immeuble
39
+ - Golden ref: immeuble
40
+
41
+ ## Entity counts
42
+ | type | expected | actual | ok |
43
+
44
+ ## Relation counts
45
+ | edge | expected | actual | ok |
46
+
47
+ ## Diagnostics (L2)
48
+ - missing_required_relations: …
49
+
50
+ ## Gaps (max 3)
51
+ 1. …
52
+ ```
53
+
54
+ ## Automated alternative
55
+
56
+ ```bash
57
+ node scripts/import-immeuble-demo-llm.mjs --mode mock --reset
58
+ # → reports/immeuble-demo-llm/<timestamp>/report.md
59
+ ```
60
+
61
+ ## Done
62
+
63
+ Lab complete when success-criteria thresholds pass or gaps are documented with remediation plan.
@@ -0,0 +1,42 @@
1
+ # Gap rules checklist — MCP lab reference
2
+
3
+ Progressive closed-world rules the agent should produce. Compare imports against these packs.
4
+
5
+ ## L0 — Patrimoine
6
+
7
+ File: [`../gap-rules/L0-patrimoine.json`](../gap-rules/L0-patrimoine.json)
8
+
9
+ | rule_id | Check |
10
+ |---------|-------|
11
+ | unit-one-cellar | each unit → exactly one assigned_cellar |
12
+ | unit-in-building | each unit → inbound contains from building/block |
13
+ | garage-at-most-one-unit | parking not shared across units |
14
+
15
+ ## L1 — Syndic naïf (pedagogy)
16
+
17
+ File: [`../gap-rules/L1-syndic-naive.json`](../gap-rules/L1-syndic-naive.json)
18
+
19
+ Unfiltered `unit-has-owner` → false positive on **Érables Appartement A4** (`vacant_works`).
20
+
21
+ ## L2 — Syndic filtré (target for MCP lab + reference)
22
+
23
+ Files:
24
+
25
+ - [`../gap-rules/L2-syndic-filtered.json`](../gap-rules/L2-syndic-filtered.json)
26
+ - [`../../gap-rules/syndic.json`](../../gap-rules/syndic.json) (syndic L2 for workspace `immeuble`)
27
+
28
+ | rule_id | Filter |
29
+ |---------|--------|
30
+ | unit-has-owner | usage_status ∉ {vacant, vacant_works} |
31
+ | occupied-unit-has-occupant | same |
32
+ | tenant-occupied-has-lease | usage_status ∈ {tenant_occupied, owner_abroad_tenant} |
33
+
34
+ ## L3 — Finance + motifs
35
+
36
+ File: [`../gap-rules/L3-full.json`](../gap-rules/L3-full.json) + [`motifs.json`](../gap-rules/motifs.json)
37
+
38
+ Optional for MCP lab; required for training module B3.
39
+
40
+ ## Axioms (human-readable)
41
+
42
+ See [`../gap-rules/closed-world-contract.md`](../gap-rules/closed-world-contract.md).
@@ -0,0 +1,54 @@
1
+ # Ontology checklist — MCP lab reference
2
+
3
+ Read-only target for agent validation. Canonical source: [`ontologies/immeuble/core.yaml`](../../../ontologies/immeuble/core.yaml).
4
+
5
+ ## Entity types (minimum)
6
+
7
+ | Type | Expected count (approx.) | Notes |
8
+ |------|--------------------------|-------|
9
+ | building | 2 | Tilleuls, Érables |
10
+ | block | 3 | 1 + 2 |
11
+ | unit | 13 | 5 + 8 |
12
+ | person | ~30 | owners, occupants, tenants, children |
13
+ | household | 13 | one per unit |
14
+ | lease_contract | 5 | tenant units |
15
+ | cellar | 13 | one per unit |
16
+ | parking_space | 7 | garages assignés |
17
+ | private_garden | 6 | RDC units |
18
+ | coda_entry | 3 | payment cases |
19
+ | billing_group | 2+ | per building |
20
+ | organization | 2+ | syndic, landlords |
21
+
22
+ ## Edge types (minimum)
23
+
24
+ | Edge | Role |
25
+ |------|------|
26
+ | contains | building → block → unit |
27
+ | owns | person → unit |
28
+ | occupies | person → unit |
29
+ | household_member | person → household |
30
+ | primary_residence_of | household → unit |
31
+ | leases | lease_contract → unit |
32
+ | rented_to | person → lease_contract |
33
+ | assigned_cellar | unit → cellar |
34
+ | assigned_garage | unit → parking_space |
35
+ | uses_exclusive | unit → private_garden |
36
+ | uses_common | unit → shared space |
37
+ | matched_to | coda_entry → payment |
38
+ | allocated_to | payment → billing_group |
39
+ | represents | person → organization (syndic staff) |
40
+
41
+ ## Facet dimensions (documents)
42
+
43
+ | Namespace | Dimension | Example values |
44
+ |-----------|-----------|----------------|
45
+ | source | document_type | statuts_copropriete, bail, pv_ag, extrait_coda, … |
46
+ | domain | building | Résidence Les Tilleuls, Résidence Les Érables |
47
+ | domain | unit | Tilleuls Appartement A1, … |
48
+ | domain | role | coproprietaire, locataire, occupant |
49
+ | domain | scenario | scenario:tenant-lease, … |
50
+ | finance | payment_status | complete, partial, review |
51
+
52
+ ## Competency questions
53
+
54
+ See [`../reference/scenarios.yaml`](../reference/scenarios.yaml).
@@ -0,0 +1,42 @@
1
+ # MCP lab corpus
2
+
3
+ Raw-ish source documents for reconstructing the syndic demo via the MCP agent workflow.
4
+
5
+ Separate from the bundled golden corpus (`../bundle/immeuble.bundle.json`).
6
+
7
+ **Agent entry:** [`../README.md`](../README.md) → [`../prompts/00-prerequisites.md`](../prompts/00-prerequisites.md)
8
+
9
+ ## Import target
10
+
11
+ ```bash
12
+ export GHOSTCRAB_SQLITE_PATH="$PWD/data/immeuble.sqlite"
13
+ ```
14
+
15
+ ## Scripted flow (mock CI)
16
+
17
+ ```bash
18
+ node scripts/import-immeuble.mjs --mode mock --reset
19
+ node scripts/import-immeuble.mjs --reset --limit-docs 1 --debug-prompts
20
+ ```
21
+
22
+ ## Manual equivalent
23
+
24
+ ```bash
25
+ node bin/gcp.mjs brain ontology compile \
26
+ --workspace-id immeuble \
27
+ --ontology-id immeuble::core \
28
+ --input ontologies/immeuble/core.yaml \
29
+ --import-db \
30
+ --db "$GHOSTCRAB_SQLITE_PATH"
31
+
32
+ while read -r doc_id filename; do
33
+ node bin/gcp.mjs brain document --force document-profile-enqueue \
34
+ --content-file "examples/immeuble/sources/documents/$filename" \
35
+ --workspace-id immeuble \
36
+ --collection-id immeuble::docs \
37
+ --doc-id "$doc_id" \
38
+ --language fr
39
+ done < <(node -e 'const m=require("./examples/immeuble/sources/documents/manifest.json"); for (const f of m.files) console.log(f.doc_id, f.filename)')
40
+ ```
41
+
42
+ Coverage expectations: `expected-coverage.json` and [`../success-criteria.yaml`](../success-criteria.yaml).
@@ -0,0 +1,8 @@
1
+ # Inventaire fictif des annexes et parties communes
2
+
3
+ Inventaire fictif des caves, garages, jardins privatifs et parties communes.
4
+
5
+ Tous les appartements des residences Les Tilleuls et Les Erables disposent d'une cave identifiee au meme lot.
6
+ Garages attribues: Tilleuls A1, Tilleuls A3, Tilleuls A5, Erables A1, Erables A4, Erables B1, Erables B4.
7
+ Jardins privatifs a usage exclusif: tous les lots du rez-de-chaussee, soit Tilleuls A1, Tilleuls A2, Erables A1, Erables A2, Erables B1 et Erables B2.
8
+ Parties communes: buanderie, machines a laver, jardins communs, locaux techniques. Les menages utilisent les parties communes de leur immeuble.
@@ -0,0 +1 @@
1
+ Les appartements du rez-de-chaussée disposent d'un jardin privatif à usage exclusif. Chaque appartement dispose d'une cave. Les garages sont attachés à certains lots selon l'acte de base.
@@ -0,0 +1 @@
1
+ Les lots Érables A2, B2, B3 et B4 sont occupés par des locataires sous bail écrit. Les baux relient le bailleur, le ménage locataire, le lot, la date de début et le loyer mensuel.
@@ -0,0 +1,11 @@
1
+ # Synthese fictive des baux locatifs
2
+
3
+ Synthese fictive fournie au syndic pour identifier les lots occupes par locataires.
4
+
5
+ | Bail | Lot | Bailleur | Menage locataire | Date debut | Loyer mensuel |
6
+ | --- | --- | --- | --- | --- | --- |
7
+ | Bail Tilleuls A4 - Karim Benali | Tilleuls Appartement A4 | Immo Invest SRL | Menage Karim Benali | 2025-09-01 | 835 EUR |
8
+ | Bail Erables A2 - Famille Legrand | Erables Appartement A2 | Patrimoine Nord SRL | Menage Legrand | 2024-07-01 | 1120 EUR |
9
+ | Bail Erables B2 - Famille El Idrissi | Erables Appartement B2 | Immo Invest SRL | Menage El Idrissi | 2025-02-01 | 1040 EUR |
10
+ | Bail Erables B3 - Famille Klein | Erables Appartement B3 | Patrimoine Nord SRL | Menage Klein | 2023-11-01 | 990 EUR |
11
+ | Bail Erables B4 - Colocation | Erables Appartement B4 | Marta Rossi | Menage colocation Laurent-Vermeulen | 2026-01-01 | 1250 EUR |
@@ -0,0 +1,10 @@
1
+ # Extrait CODA fictif janvier 2026
2
+
3
+ Extrait CODA fictif pour les comptes ACP.
4
+
5
+ Compte CODA ACP Tilleuls: IBAN BE12000000000001.
6
+ 05/01/2026: virement 1847,23 EUR. Communication: CP LOT A3 CHGE JANV. Statut attendu: paiement complet, a matcher avec Appel charges Tilleuls janvier 2026 et Groupe facturation Tilleuls A3.
7
+ 08/01/2026: virement 650,00 EUR. Communication: VIR INCONNU. Statut attendu: revue manuelle, rapprochement possible avec Appel charges Tilleuls fevrier 2026.
8
+
9
+ Compte CODA ACP Erables: IBAN BE12000000000002.
10
+ 07/01/2026: virement 500,00 EUR. Communication: LOT B2 PARTIEL. Statut attendu: paiement partiel, a rapprocher de l'appel Erables janvier 2026 et du groupe de facturation Erables B2 bailleur.
@@ -0,0 +1 @@
1
+ Les Tilleuls A1 sont occupés par Henri et Madeleine Dupont. Les Tilleuls A3 sont occupés par Nicolas, Pauline, Lina et Tom Dupont. Les Érables B2 sont loués à la famille El Idrissi.
@@ -0,0 +1,18 @@
1
+ # Composition fictive des occupants
2
+
3
+ Etat fictif des occupants communique au syndic pour la repartition operationnelle des avis.
4
+
5
+ Tilleuls Appartement A1: Henri Dupont et Madeleine Dupont, couple senior, occupants proprietaires au rez-de-chaussee.
6
+ Tilleuls Appartement A2: Sofia Martin, personne seule, occupante proprietaire.
7
+ Tilleuls Appartement A3: Nicolas Dupont, Pauline Dupont, Lina Dupont et Tom Dupont; Nicolas est le fils du couple Dupont du lot A1.
8
+ Tilleuls Appartement A4: Karim Benali, locataire personne seule.
9
+ Tilleuls Appartement A5: Lena Peeters, Noah De Smet et Mila De Smet, menage avec enfant.
10
+
11
+ Erables Appartement A1: Alice Bernard, occupante proprietaire.
12
+ Erables Appartement A2: Marc Legrand, Eva Legrand et Nora Legrand, menage locataire.
13
+ Erables Appartement A3: Victor Moreau, occupant proprietaire.
14
+ Erables Appartement A4: lot vacant pour travaux, proprietaire Claire Dubois.
15
+ Erables Appartement B1: Olivier Renard et Julie Renard, situation succession avec usufruit et nue-propriete.
16
+ Erables Appartement B2: Fatima El Idrissi, Samir El Idrissi, Yanis El Idrissi et Amel El Idrissi, menage locataire.
17
+ Erables Appartement B3: Thomas Klein, Sarah Klein et Eliott Klein, menage locataire.
18
+ Erables Appartement B4: Camille Laurent et Jonas Vermeulen, colocation sous bail; proprietaire Marta Rossi a l'etranger.
@@ -0,0 +1,70 @@
1
+ {
2
+ "workspace_id": "immeuble",
3
+ "golden_workspace_id": "immeuble",
4
+ "buildings": [
5
+ {
6
+ "name": "Résidence Les Tilleuls",
7
+ "blocks": 1,
8
+ "units": 5,
9
+ "quota_total": 1000
10
+ },
11
+ {
12
+ "name": "Résidence Les Érables",
13
+ "blocks": 2,
14
+ "units": 8,
15
+ "quota_total": 1000
16
+ }
17
+ ],
18
+ "counts": {
19
+ "buildings": 2,
20
+ "blocks": 3,
21
+ "units": 13,
22
+ "households": 13,
23
+ "cellars": 13,
24
+ "private_gardens": 6,
25
+ "lease_contracts": 5,
26
+ "coda_entries": 3,
27
+ "billing_group": 13,
28
+ "shared_space": 6,
29
+ "shared_equipment": 4
30
+ },
31
+ "unit_checks": {
32
+ "all_units_have_cellar": true,
33
+ "ground_floor_units_have_private_garden": true
34
+ },
35
+ "relation_edges": [
36
+ "contains",
37
+ "owns",
38
+ "occupies",
39
+ "household_member",
40
+ "primary_residence_of",
41
+ "leases",
42
+ "rented_to",
43
+ "assigned_cellar",
44
+ "assigned_garage",
45
+ "uses_exclusive",
46
+ "uses_common",
47
+ "matched_to",
48
+ "allocated_to",
49
+ "requires_review"
50
+ ],
51
+ "search_terms": [
52
+ "appartement",
53
+ "Dupont",
54
+ "bail",
55
+ "CODA",
56
+ "jardin"
57
+ ],
58
+ "document_facets": {
59
+ "source.document_type": [
60
+ "statuts_copropriete",
61
+ "registre_coproprietaires",
62
+ "composition_menage",
63
+ "bail",
64
+ "pv_ag",
65
+ "extrait_coda",
66
+ "annexe_lot",
67
+ "registre_facturation"
68
+ ]
69
+ }
70
+ }
@@ -0,0 +1 @@
1
+ 05/01/2026: virement 1847,23 EUR avec communication CP LOT A3 CHGE JANV. 07/01/2026: virement 500,00 EUR LOT B2 PARTIEL. 08/01/2026: virement 650,00 EUR VIR INCONNU.
@@ -0,0 +1,30 @@
1
+ # Registre fictif des groupes de facturation
2
+
3
+ Registre tenu par le syndic pour les appels de charges des ACP Les Tilleuls et Les Erables.
4
+
5
+ Chaque lot possede un **groupe de facturation** unique. Le syndic emet les appels de charges vers ce groupe ; la relation **`bills_to`** lie le groupe au lot concerne et indique qui recoit la facture (coproprietaires, bailleur, mandataire, etc.).
6
+
7
+ ## Residence Les Tilleuls
8
+
9
+ | Lot | Groupe facturation | Destinataire appels | Mode repartition | Relation |
10
+ | --- | --- | --- | --- | --- |
11
+ | Tilleuls Appartement A1 | Groupe facturation Tilleuls A1 | Henri Dupont ; Madeleine Dupont | 50% / 50% | bills_to → lot A1 |
12
+ | Tilleuls Appartement A2 | Groupe facturation Tilleuls A2 | Sofia Martin | 100% | bills_to → lot A2 |
13
+ | Tilleuls Appartement A3 | Groupe facturation Tilleuls A3 | Nicolas Dupont ; Pauline Dupont | 50% / 50% | bills_to → lot A3 |
14
+ | Tilleuls Appartement A4 | Groupe facturation Tilleuls A4 bailleur | Immo Invest SRL (bailleur) | bailleur | bills_to → lot A4 |
15
+ | Tilleuls Appartement A5 | Groupe facturation Tilleuls A5 | Lena Peeters ; Noah De Smet | 50% / 50% | bills_to → lot A5 |
16
+
17
+ ## Residence Les Erables
18
+
19
+ | Lot | Groupe facturation | Destinataire appels | Mode repartition | Relation |
20
+ | --- | --- | --- | --- | --- |
21
+ | Erables Appartement A1 | Groupe facturation Erables A1 | Alice Bernard | 100% | bills_to → lot A1 |
22
+ | Erables Appartement A2 | Groupe facturation Erables A2 bailleur | Patrimoine Nord SRL (bailleur) | bailleur | bills_to → lot A2 |
23
+ | Erables Appartement A3 | Groupe facturation Erables A3 | Victor Moreau | 100% | bills_to → lot A3 |
24
+ | Erables Appartement A4 | Groupe facturation Erables A4 travaux | Claire Dubois (travaux en cours) | travaux | bills_to → lot A4 |
25
+ | Erables Appartement B1 | Groupe facturation Erables B1 succession | Olivier Renard (usufruit) ; Julie Renard (nue-propriete) | usufruit / nue-propriete | bills_to → lot B1 |
26
+ | Erables Appartement B2 | Groupe facturation Erables B2 bailleur | Immo Invest SRL (bailleur) | bailleur | bills_to → lot B2 |
27
+ | Erables Appartement B3 | Groupe facturation Erables B3 bailleur | Patrimoine Nord SRL (bailleur) | bailleur | bills_to → lot B3 |
28
+ | Erables Appartement B4 | Groupe facturation Erables B4 mandataire | Marta Rossi (mandataire pour proprietaire a l'etranger) | mandataire | bills_to → lot B4 |
29
+
30
+ Note syndic : les appels mensuels CODA et les quittances automatiques referent au groupe de facturation du lot concerne.
@@ -0,0 +1,79 @@
1
+ {
2
+ "workspace_id": "immeuble",
3
+ "collection_id": "immeuble::docs",
4
+ "ontology_id": "immeuble::core",
5
+ "language": "fr",
6
+ "source_kind": "fictional_realistic_belgian_syndic",
7
+ "generated_from": "examples/immeuble/scripts/build-immeuble-model.mjs",
8
+ "files": [
9
+ {
10
+ "doc_id": 1,
11
+ "filename": "statuts-tilleuls.md",
12
+ "title": "Statuts fictifs - ACP Residence Les Tilleuls",
13
+ "document_type": "statuts_copropriete"
14
+ },
15
+ {
16
+ "doc_id": 2,
17
+ "filename": "statuts-erables.md",
18
+ "title": "Statuts fictifs - ACP Residence Les Erables",
19
+ "document_type": "statuts_copropriete"
20
+ },
21
+ {
22
+ "doc_id": 3,
23
+ "filename": "registre-coproprietaires.md",
24
+ "title": "Registre fictif des coproprietaires",
25
+ "document_type": "registre_coproprietaires"
26
+ },
27
+ {
28
+ "doc_id": 4,
29
+ "filename": "composition-occupants.md",
30
+ "title": "Composition fictive des occupants",
31
+ "document_type": "composition_menage"
32
+ },
33
+ {
34
+ "doc_id": 5,
35
+ "filename": "baux-locatifs.md",
36
+ "title": "Synthese fictive des baux locatifs",
37
+ "document_type": "bail"
38
+ },
39
+ {
40
+ "doc_id": 6,
41
+ "filename": "pv-ag-budget-2026.md",
42
+ "title": "Proces-verbal fictif AG budget 2026",
43
+ "document_type": "pv_ag"
44
+ },
45
+ {
46
+ "doc_id": 7,
47
+ "filename": "coda-janvier-2026.md",
48
+ "title": "Extrait CODA fictif janvier 2026",
49
+ "document_type": "extrait_coda"
50
+ },
51
+ {
52
+ "doc_id": 8,
53
+ "filename": "annexes-caves-garages-jardins.md",
54
+ "title": "Inventaire fictif des annexes et parties communes",
55
+ "document_type": "annexe_lot"
56
+ },
57
+ {
58
+ "doc_id": 9,
59
+ "filename": "groupes-facturation.md",
60
+ "title": "Registre fictif des groupes de facturation",
61
+ "document_type": "registre_facturation"
62
+ },
63
+ {
64
+ "filename": "note-architecte-chantier-erables.md",
65
+ "title": "Note architecte chantier Érables",
66
+ "domain": "construction_lite"
67
+ },
68
+ {
69
+ "filename": "permis-urbanisme-erables.md",
70
+ "title": "Permis urbanisme Érables",
71
+ "domain": "construction_lite"
72
+ },
73
+ {
74
+ "filename": "pv-reception-reserves-erables.md",
75
+ "title": "PV réception réserves Érables",
76
+ "domain": "construction_lite"
77
+ }
78
+ ]
79
+ }
@@ -0,0 +1,3 @@
1
+ # Note architecte chantier Érables
2
+
3
+ Claire Delvaux confirme le phasage toiture puis façades pour la Résidence Les Érables. Le chantier démarre avec deux jours de retard à cause de la livraison échafaudage.
@@ -0,0 +1,3 @@
1
+ # Permis urbanisme Érables
2
+
3
+ La Commune de Wavre délivre le permis PU-2026-014 pour travaux toiture et façades de la Résidence Les Érables. Le permis expire le 10 février 2027.
@@ -0,0 +1,3 @@
1
+ # Procedures operationnelles demo
2
+
3
+ La demo couvre proprietaires, occupants, baux, charges, CODA, relances, AG, maintenance, conformite, sinistres et chantiers.
@@ -0,0 +1 @@
1
+ L'assemblée générale de l'ACP Résidence Les Tilleuls du 12 décembre 2025 approuve le budget 2026 et les appels de charges mensuels.
@@ -0,0 +1,3 @@
1
+ # PV réception réserves Érables
2
+
3
+ L'inspection sécurité relève une réserve ouverte sur les garde-corps de l'échafaudage. La réserve doit être levée avant poursuite complète des travaux de façade.
@@ -0,0 +1,24 @@
1
+ # Registre fictif des coproprietaires
2
+
3
+ Registre fictif tenu par le syndic pour les ACP Les Tilleuls et Les Erables.
4
+
5
+ Residence Les Tilleuls:
6
+ | Lot | Titulaire(s) | Droit | Quote-part |
7
+ | --- | --- | --- | --- |
8
+ | Tilleuls Appartement A1 | Henri Dupont; Madeleine Dupont | pleine_propriete | 50%; 50% |
9
+ | Tilleuls Appartement A2 | Sofia Martin | pleine_propriete | 100% |
10
+ | Tilleuls Appartement A3 | Nicolas Dupont; Pauline Dupont | pleine_propriete | 50%; 50% |
11
+ | Tilleuls Appartement A4 | Immo Invest SRL | pleine_propriete | 100% |
12
+ | Tilleuls Appartement A5 | Lena Peeters; Noah De Smet | pleine_propriete | 50%; 50% |
13
+
14
+ Residence Les Erables:
15
+ | Lot | Titulaire(s) | Droit | Quote-part |
16
+ | --- | --- | --- | --- |
17
+ | Erables Appartement A1 | Alice Bernard | pleine_propriete | 100% |
18
+ | Erables Appartement A2 | Patrimoine Nord SRL | pleine_propriete | 100% |
19
+ | Erables Appartement A3 | Victor Moreau | pleine_propriete | 100% |
20
+ | Erables Appartement A4 | Claire Dubois | pleine_propriete | 100% |
21
+ | Erables Appartement B1 | Olivier Renard; Julie Renard | usufruit; nue_propriete | 100%; 100% |
22
+ | Erables Appartement B2 | Immo Invest SRL | pleine_propriete | 100% |
23
+ | Erables Appartement B3 | Patrimoine Nord SRL | pleine_propriete | 100% |
24
+ | Erables Appartement B4 | Marta Rossi | pleine_propriete | 100% |
@@ -0,0 +1 @@
1
+ La résidence Les Tilleuls comprend un bloc A, cinq appartements, une buanderie, un jardin commun et des jardins privatifs au rez-de-chaussée. Chaque lot possède une cave; certains lots disposent d'un garage.