docs: record what building projects changed about the plan
Five places the build chose differently, and one thing the plan did not anticipate: a project reaches a chronicle only off the GroupSignedEvent record, because the deprecated rebuild has no `toProjectEvent` and deliberately never will. `recordSignedEvents` catches its own failure so a ceremony that succeeded is not reported as failed, which leaves a narrow window where the row exists and the signed event does not -- a project this device can show and can never hand on. There is a test holding that case open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -73,10 +73,12 @@ smallest of the plans: it changes the entrance to the direct-message flow and
|
|||||||
nothing past it, so read it with `StartDirectMessageToNpubOrNip05Dialog` and
|
nothing past it, so read it with `StartDirectMessageToNpubOrNip05Dialog` and
|
||||||
`ChatRoomMessagingViewModel.initiateNewChat` open, its four decisions before its
|
`ChatRoomMessagingViewModel.initiateNewChat` open, its four decisions before its
|
||||||
four phases, and its table of where the build chose differently first.
|
four phases, and its table of where the build chose differently first.
|
||||||
The projects note is a phased plan that has not been built, and is the only one
|
The projects note is a phased plan that has been built as far as its seventh
|
||||||
|
phase, and is the only one
|
||||||
whose starting point is outside this repository: the platform's server schema,
|
whose starting point is outside this repository: the platform's server schema,
|
||||||
`mantra-db-models`, has had the three models for years. It reads as the
|
`mantra-db-models`, has had the three models for years. It reads as the
|
||||||
translation domain's unanswered question — the app can say what a chapter is and
|
translation domain's unanswered question — the app can say what a chapter is and
|
||||||
who translated it, and cannot say what any of it is for — so read it after the
|
who translated it, and cannot say what any of it is for — so read it after the
|
||||||
nip30303 conventions are familiar, its decisions before its phases, and its scope
|
nip30303 conventions are familiar, its decisions before its phases, and its scope
|
||||||
fork before either, because that one changes the shape of the rest.
|
fork before either, because that one changes the shape of the rest, and its
|
||||||
|
table of where the build chose differently first.
|
||||||
|
|||||||
@@ -1,6 +1,28 @@
|
|||||||
# Projects
|
# Projects
|
||||||
|
|
||||||
A phased plan, not yet built.
|
Phases 0 through 7 are built. Phases 8 and 9 -- removing something from a
|
||||||
|
project, and projects that span rooms -- are not, and the reasoning for both is
|
||||||
|
below rather than anywhere else.
|
||||||
|
|
||||||
|
**Where the build chose differently**, each of which is explained in the phase
|
||||||
|
it belongs to:
|
||||||
|
|
||||||
|
| the plan said | the build did | why |
|
||||||
|
|---|---|---|
|
||||||
|
| a `creator` tag and an `owner` tag | a `creator` tag, and owners as `ContributorTag`s with `ROLE_OWNER` | a project has several owners, which is the cardinality `ContributorTag` is for |
|
||||||
|
| the room's project section is new | it replaced a stub | `ChatRoomDetailScreen` already had a heading, a permanent empty line and an `ImplementationPendingRoute`, under a `// TODO: Add projects...` |
|
||||||
|
| the `summarize` resolver is Phase 4 | the seam is Phase 4, the resolution is Phase 7c | two of its four call sites are composables and cannot await a database, so the names are pre-resolved in `FrostSigningViewModel` |
|
||||||
|
| three chronicle tests to add | three to add and four to fix | the existing suite compares a seeded room against `CHRONICLABLE_KINDS` itself, and one test asserts every chroniclable kind can also be *rebuilt* -- which projects deliberately cannot |
|
||||||
|
| around twenty new strings | eighteen, three of them already there | `projects`, `no_projects_exists_in_this_group` and `create_project` came with the stub |
|
||||||
|
|
||||||
|
The one thing found while building that the plan did not anticipate: a project
|
||||||
|
reaches a chronicle only off the `GroupSignedEvent` record, because there is no
|
||||||
|
`toProjectEvent` rebuild. `recordSignedEvents` catches its own failure so that a
|
||||||
|
ceremony that succeeded is not reported as failed, which leaves a narrow window
|
||||||
|
where a project row exists and its signed event does not -- a project this
|
||||||
|
device can show and can never hand on. `ChronicleAssemblyJvmTest.a project is
|
||||||
|
only ever chronicled off the record` holds that case open rather than letting it
|
||||||
|
be discovered later.
|
||||||
|
|
||||||
`mantra-db-models` — the platform's server-side Sequelize schema — has had three
|
`mantra-db-models` — the platform's server-side Sequelize schema — has had three
|
||||||
models waiting for this app since before it existed: `project`, with a name and a
|
models waiting for this app since before it existed: `project`, with a name and a
|
||||||
|
|||||||
Reference in New Issue
Block a user