Sub-Project Support: Health → Mental (Alias: Psychologie) und das generelle Sub-Projekt-Modell #1
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Request
m (2026-05-15, PWA voice):
(EN: "We need a sub-project of Health in projax, called
Mental. AliasPsychologie. It should let m keep and file notes about his own psychology.")Concretely: m wants a sub-project
Mental(aliasPsychologie) under the parent projectHealthin projax.Implication for the projax data model
projax today (Phase 1) has a flat project list (
mai.projects). Sub-projects are not modelled.Required:
parent_project_idforeign key (nullable) onmai.projects.id. Top-level projects haveparent_project_id IS NULL; sub-projects point at their parent.aliases TEXT[]. m'sMentalwith aliasPsychologieis the first concrete use-case. Search + navigation must match aliases too.[[concept-promotion-demotion-projects]]— projax should be the natural carrier for these lifecycle transitions.Concrete setup after the schema update
Once sub-project logic exists:
Healthas a top-level project (if not already present).Mentalas a sub-project ofHealth, aliasPsychologie.topic-mental-health(created 2026-05-15) remains the knowledge backbone — projax links to it; we don't duplicate storage.Mentalproject should be markablevisibility: private— m's psychology notes are not for other eyes.Scope of this issue
parent_project_id+aliasesfields onmai.projects.mai project list --treeoption (or default behaviour).HealthandMental(with aliasPsychologie) in the DB.visibilityfield per project (private/personal/public), filtered in UI + API.A parallel sub-project use-case is
FinanzplanungunderFinances(also captured 2026-05-15, mBrian[[topic-finanzplanung]]) — same schema covers both.Out of scope
TopandSubis enough. If a sub-sub-project is needed later, that's a schema-extension issue.topic-mental-healthandtopic-finanzplanungin mBrian directly; projax links to them eventually.Refs
[[concept-promotion-demotion-projects]]— projax should natively support promote/demote.[[topic-mental-health]],[[topic-finanzplanung]]— the data backbones for the notes.docs/design.md— source of truth for the data model; must be extended.Role: researcher initial (schema design + migration plan + UI sketch), then coder.
Third sub-project use-case — NewHomeSpecs under mHome
Added 2026-05-16 (PWA chat): m wants a sub-project
NewHomeSpecsundermHomefor collecting specifications for his next home. Same schema requirement as Mental (under Health) and Finanzplanung (under Finances) — parent_project_id + alias + private visibility.The mBrian backbone is already in place as
[[topic-new-home-specs]](private). Once the schema lands, the worker should createNewHomeSpecsas a sub-project ofmHomeand link to the mBrian topic.If any of the three (Mental / Finanzplanung / NewHomeSpecs) suggests refinements to the schema (e.g. a fourth field, a different alias-resolution rule), it'd be the user-research signal for it.
No change to scope of this issue; just adding the third concrete consumer for the implementer's awareness.
This issue is obsolete — schema already exists
m corrected me on 2026-05-16: projax has been actively developed and the schema features I framed as "needed" are already in place:
aliases text[]: present since migration0001_init.sql.0010_multi_parent.sql.items_unifiedmodel: present since0004+0009simplification.The codebase is at Phase 3o (admin-index) — way past the Phase 1 framing in the original body. The schema portion of this issue is therefore done.
The three concrete consumers (Mental under Health, Finanzplanung under Finances, NewHomeSpecs under mHome) can be created via
projax POST /new?parent=…or via the projax-mcp surface oncem/projax#3wires it up.Marking
status:done. m can close when ready.Head-Triage 2026-07-17: Modell längst da,
Mentaljetzt angelegt, ein echter Blocker bleibt (#7)Beim Session-Start gegen den Live-Stand geprüft (
main@bcf3412). Das Issue ist von 2026-05-15 und beschreibt einen projax-Stand, den es so nicht mehr gibt — es redet noch vonmai.projectsals Store und einer flachen Projektliste. Seither sind Phase 1–8 gelaufen; Sub-Projekte sind seit Phase 6 kein offener Punkt mehr.Scope-Punkt für Punkt
parent_project_id-FK (also ein Elternteil). Live ist stattdessen ein DAG überchild_of-Kanten in mBrian: beliebige Tiefe und Mehrfach-Eltern. Beweis aus dem Live-Baum:health.sports.manjin(drei Ebenen), undracetrackhängt real an zwei Eltern gleichzeitig./views/treerendert den Baum, Detail-Seite zeigt die Eltern.mai project list --tree— ❌ nicht gebaut, und absichtlich nicht: projax CLAUDE.md führt "CLI surface" unter Out of scope ("m has explicitly opted out"). Der Punkt ist durch eine spätere Entscheidung von dir überholt, nicht vergessen worden. Sag Bescheid, falls du das anders willst.Health+Mentalanlegen — ✅ heute erledigt.healthgab es schon (Root-Area).Mentalneu:health.mental, id4bbe78f7-520c-47e2-bb00-9b0fe1425ea5. Verlinkt im content_md auf den mBrian-Topictopic-mental-healthstatt die Inhalte zu duplizieren — wie im Issue gefordert.visibility-Enum (private/personal/public), sondern einpublic-Boolean, das auffalsesteht, solange du nichts anderes sagst. Dazu ist die ganze App Tailscale-only.health.mentalist damit privat — es gibt schlicht keine Oberfläche, auf der es auftauchen könnte. Wenn du ein echtes dreistufigesvisibilitywillst, ist das ein eigenes Issue.Der eine echte Blocker: der Alias geht nicht
Psychologiekonnte ich nicht setzen — und das ist kein Vertipper, sondern ein Loch, das mir hier aufgefallen ist:aliaseshat drei Read-Pfade und keinen einzigen Write-Pfad. Alle 88 Items live habenaliases:[]. Die Suche rankt explizit nach Alias, der Tree-Filter matcht darauf, das MCP gibt das Feld zurück — nur setzen kann es niemand: kein Formularfeld, kein MCP-Parameter, und der Writer schickt das Feld nie, obwohl die mBrian-API es auf POST und PATCH längst akzeptiert.Als #7 gefilet und in Arbeit. Sobald das durch ist, bekommt
health.mentalden AliasPsychologieund dieses Issue ist auch in Punkt 2 erfüllt.Status
Offen bleibt an #1 real nur der Alias (→ #7). Punkt 4 ist durch deinen CLI-Opt-out erledigt. Ich schließe nicht selbst — sobald #7 durch ist, melde ich mich hier nochmal.
Alias-Anforderung erfüllt —
Mentalhat jetzt den AliasPsychologieDie letzte offene Anforderung aus diesem Issue ist erledigt. Live-Stand von
health.mental(id4bbe78f7-520c-47e2-bb00-9b0fe1425ea5):Großschreibung erhalten —
Psychologie, nichtpsychologie.Warum das bis jetzt nicht ging
aliaseswar ein totes Feld: drei Read-Pfade, kein einziger Write-Pfad (#7). Das Projekt war angelegt, der Alias schlicht nicht setzbar — als Workaround stand „Alias: Psychologie" nur als Prosa imcontent_md. Der Write-Pfad ist mit #7 gebaut (Writer-Payload + Web-Edit-Form + MCP-Parameter), dann der Alias gesetzt.Commit:
e859a98cd0Details + Verify-Protokoll: #7
Nachweis, dass der Alias auch wirkt
Die Suche findet
Mentalüber den Alias — verifiziert mit einem Token, das ausschließlich inaliasessteht (die Suche nachPsychologieallein wäre kein Beweis, das Wort steht auch im Content). Der Tree-Filter matcht Aliases case-insensitiv,psychologiefindet es also genauso.Der Alias ist jetzt schon live wirksam — er liegt in den Daten, nicht im Binary; die Read-Seite war fertig und läuft ab dem Moment, wo Daten da sind.
Offen
Der Prosa-Satz „Alias: Psychologie" im
content_mdist jetzt redundant. Ich habe ihn bewusst nicht angefasst — das ist dein Text, und Content-Edits waren nicht Teil des Auftrags. Sag Bescheid, wenn er raus soll.Beide Issues (#1, #7) lasse ich offen — Schließen ist deine Sache.
Alle Anforderungen erfüllt (2026-07-17) — bereit zum Schließen
Nachtrag zu meinem Triage-Kommentar von heute früh: der Alias ist jetzt da.
health.mentalexistiert, Elternteilhealth, privat (public: false).Psychologieist live — live verifiziert nach Deploy70b0e04(healthz == HEAD):aliases: ["Psychologie"].Der Blocker war #7 (aliases hatten drei Read-Pfade und keinen Write-Pfad — alle 88 Items standen auf
aliases:[]). Ist gemerged und deployed.Ein ehrlicher Vorbehalt: die Suche findet
Mentalüber den Alias, aber ungerankt. Der Bucket-Vertrag, der einen Alias-Treffer über einen Fließtext-Treffer stellt, existiert nur im Legacy-Backend; Produktion fährtPROJAX_BACKEND=mbrian, dessen Suche flach ist. Das ist #10 und wartet auf deine Entscheidung — es ändert nichts an der Erfüllung dieses Issues, aber "Alias funktioniert" heißt hier "wird gefunden", nicht "wird bevorzugt".Punkt 4 des ursprünglichen Scopes (
mai project list --tree) bleibt bewusst offen — CLI ist per projax CLAUDE.md out of scope, deine Entscheidung von damals.Ich schließe nicht selbst.