mirror of
https://github.com/banisterious/obsidian-charted-roots.git
synced 2026-07-22 06:40:24 +00:00
docs: v0.22.75 release round-up
This commit is contained in:
parent
6b54f0750a
commit
0e04ff548e
4 changed files with 63 additions and 3 deletions
|
|
@ -4,6 +4,7 @@ This document contains detailed implementation notes for significant features. F
|
|||
|
||||
## Table of Contents
|
||||
|
||||
- [v0.22.75 Release Cohort](#v02275-release-cohort-2026-06-23)
|
||||
- [v0.22.74 Release Cohort](#v02274-release-cohort-2026-06-21)
|
||||
- [v0.22.73 Release Cohort](#v02273-release-cohort-2026-06-20)
|
||||
- [v0.22.72 Release Cohort](#v02272-release-cohort-2026-06-18)
|
||||
|
|
@ -30,6 +31,28 @@ This document contains detailed implementation notes for significant features. F
|
|||
|
||||
---
|
||||
|
||||
## v0.22.75 Release Cohort (2026-06-23)
|
||||
|
||||
A worldbuilding- and data-quality cohort: per-format GEDCOM date interpretation, living-people record superlatives against a per-universe current date, and a Data Quality check for mistyped type fields, plus fixes for Collections-tab family merging, default-universe application outside the modals, post-create relationship actions, and multi-value collection normalization. Notable implementation work:
|
||||
|
||||
**Per-format GEDCOM date interpretation ([#718](https://github.com/banisterious/obsidian-charted-roots/issues/718)).** Builds on #716's date classification. `normalizeGedcomDate` / `normalizeGedcomDateDetailed` and `parseSlashDate` in `src/gedcom/gedcom-parser.ts` take an optional `GedcomDateInterpretation` (`{ slashOrder: 'day-month' | 'month-day', eventLabel: 'import' | 'skip' }`); the defaults reproduce #716. A new `summarizeDateInterpretations(data)` plus an interpretation-aware `collectDateWarnings(data, interp)` live in `src/gedcom/gedcom-date-warnings.ts`. `dateInterpretation` was added to `GedcomImportOptionsV2` and threaded through the importer's birth/death and marriage writes and result warnings in `src/gedcom/gedcom-importer-v2.ts` via `gedcomDateToISO(raw, interp)`. The wizard Step 4 preview (`src/ui/import-wizard-modal.ts`) gains a "Date interpretation" controls section — per-category selects with counts, shown only when ambiguous-slash, event-label, or unparsed dates exist — that recomputes warnings on change. Scope: birth/death/marriage dates (the counted set); event dates keep the #716 default. +12 tests. Builds on [#716](https://github.com/banisterious/obsidian-charted-roots/issues/716).
|
||||
|
||||
**Living people in record superlatives ([#749](https://github.com/banisterious/obsidian-charted-roots/issues/749)).** Three pieces. (1) A per-universe `current_date` was added to `UniverseInfo` / `UniverseFrontmatter` / `CreateUniverseData` with read/create/update support in `src/universes/services/universe-service.ts`, plus fields in the Edit Universe modal (`src/universes/ui/edit-universe-modal.ts`) and the universe wizard (`src/universes/ui/universe-wizard.ts`). (2) `src/statistics/services/statistics-service.ts` gains `calculateAgeEntry`: a person with no death date is aged against the universe current date (today for real-world via `resolveUniverseCurrentYear`), backed by a lazy `universeService` and a memo cache. `computeOldestPeople` uses it and flags living entries as `${age} years (living)`. (3) A universe-aware cap via `maxAgeForRanking` (real-world living capped at 120, fictional uncapped, `cr_living === true` bypasses). `calculateLifespan` is untouched, so average-lifespan stats stay age-at-death. +5 tests.
|
||||
|
||||
**Data Quality check for mistyped property values ([#758](https://github.com/banisterious/obsidian-charted-roots/issues/758)).** A self-contained scan/preview/fix flow (not the person-scoped `DataQualityIssue` model, since the #746 bug was an event-note field), mirroring the Flatten-nested-properties batch op. New pure `src/ui/data-quality-type-checks.ts` exposes `findMistypedTypeFields(fm)` and `coerceTypeValueToText`, checking `cr_type` plus the per-`cr_type` field (`event_type` / `place_category` / `org_type` / `source_type`) and flagging non-string non-array scalars and Dates (arrays are skipped). New `src/ui/fix-mistyped-values-modal.ts` scans all `cr_type` notes, lists note + property + coerced value, and applies "Fix all" via `processFrontMatter` set to the coerced text, then re-scans. Wired into the Data Quality tab batch section (`src/ui/data-quality-tab.ts`) after Flatten. +9 tests. Surfaced from a suggestion by [@tenephor](https://github.com/tenephor) in [#746](https://github.com/banisterious/obsidian-charted-roots/issues/746).
|
||||
|
||||
**Merge hand-grouped families in the Collections tab ([#761](https://github.com/banisterious/obsidian-charted-roots/issues/761)).** `findAllFamilyComponents()` groups by graph connectivity only, so isolated people sharing a `group_name` (no biological links) stayed as separate size-1 components — even though the Person Picker merged them. The three Collections-tab call sites in `src/ui/collections-tab.ts` (the detected-families list, the analytics combine, and the paginated table) now wrap the result with the existing tested `mergeFamilyComponentsByCollectionName` helper (from #491, already used by the Person Picker). The merge is **not** applied at the source `findAllFamilyComponents`, because tree generation, Control Center, and kinship reports need the raw connected components. No new test (pure wiring of a #491-tested helper). Reported by [@DigitalDreamn](https://github.com/DigitalDreamn).
|
||||
|
||||
**Default universe outside the Create Person modal ([#751](https://github.com/banisterious/obsidian-charted-roots/issues/751) follow-up).** The #751 default-universe setting was applied only by the four "Create X" modals, so people created via the Create Family wizard (`src/ui/family-creation-wizard.ts`) or added inline from the Edit Person modal (`src/ui/quick-create-person-modal.ts`) were left without it. Both paths now apply `getDefaultUniverse` to brand-new people, matching the modals. Reported by [@DigitalDreamn](https://github.com/DigitalDreamn).
|
||||
|
||||
**Deterministic post-create person id ([#757](https://github.com/banisterious/obsidian-charted-roots/issues/757)).** After creating a person, the "Add spouse / child / parent" follow-up buttons could throw "No person context available". The Create Person modal read the new person's `cr_id` back from the metadata cache after `createPersonNote` (which generates the id internally but never returns it), and the cache often wasn't indexed yet, leaving `createdPersonCrId` undefined and tripping the guard at `create-person-modal.ts:2793`. The id is now generated upfront in the modal save flow (`generateCrId`) and set on `data.crId` before `createPersonNote`, matching the quick-create modal and family wizard pattern. No unit test (modal-flow timing, no clean seam). Reported by [@pawel-k1200](https://github.com/pawel-k1200).
|
||||
|
||||
**Multi-value collection normalization ([#755](https://github.com/banisterious/obsidian-charted-roots/issues/755) follow-up).** A `collection` set to a YAML array (e.g. two collection names) reached `normalizeLabelValue` (shipped in v0.22.74) which called `.replace` on a non-string, throwing a `TypeError` that the unguarded family-graph build propagated during onload — taking down plugin load. `normalizeLabelValue(value: unknown)` in `src/utils/wikilink-resolver.ts` was hardened to never throw: arrays normalize element-wise and join with `', '`, scalars coerce. The same coerce-at-sink cleanup was extended to three display surfaces #755 had missed — the universe read in `src/events/services/event-service.ts`, the universe read in `src/organizations/services/organization-service.ts`, and the per-universe count matching in `src/statistics/services/statistics-service.ts` — and the `fmToString` JSON-stringify wrapper was dropped in `src/maps/map-data-service.ts` so array collections render cleanly. +5 tests. Reported by [@lomarcanys](https://github.com/lomarcanys).
|
||||
|
||||
**Files created:** `src/ui/data-quality-type-checks.ts`, `src/ui/fix-mistyped-values-modal.ts`. Suite total 1618 across 140 suites.
|
||||
|
||||
---
|
||||
|
||||
## v0.22.74 Release Cohort (2026-06-21)
|
||||
|
||||
A single-universe convenience setting and a family-creation shortcut, plus a map crash fix, a wikilink-normalization fix for collections and universes, and a follow-up to the place-type hierarchy editor. Notable implementation work:
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ npm install
|
|||
- `npm run dev` - Start development mode with watch (builds to local main.js)
|
||||
- `npm run build` - Production build (fonts + esbuild + CSS; no type check — run `type-check` separately when needed)
|
||||
- `npm run type-check` - Standalone `tsc -noEmit -skipLibCheck` pass. Clean (zero errors) and gated in CI as of #704; run before pushing a tag.
|
||||
- `npm test` - Run the Vitest regression suite once (1587 tests across 139 suites as of v0.22.74, covering pure helpers for relationships, migrations, the sibling walker, event identity, date handling, and a large set of issue-specific regression suites)
|
||||
- `npm test` - Run the Vitest regression suite once (1618 tests across 140 suites as of v0.22.75, covering pure helpers for relationships, migrations, the sibling walker, event identity, date handling, and a large set of issue-specific regression suites)
|
||||
- `npm run test:watch` - Vitest in watch mode for iterative development
|
||||
- `npm run lint` - Check TypeScript code for linting errors
|
||||
- `npm run lint:fix` - Auto-fix TypeScript linting errors
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -9,6 +9,7 @@ For version-specific changes, see the [CHANGELOG](../CHANGELOG.md) and [GitHub R
|
|||
## Table of Contents
|
||||
|
||||
- [v0.22.x](#v022x)
|
||||
- [v0.22.75 Round-Up: GEDCOM Date Interpretation, Living-People Superlatives, and a Mistyped-Value Data Quality Check](#v02275-round-up-gedcom-date-interpretation-living-people-superlatives-and-a-mistyped-value-data-quality-check-v02275)
|
||||
- [v0.22.74 Round-Up: Default Universe, Create Family, and a Map Crash Fix](#v02274-round-up-default-universe-create-family-and-a-map-crash-fix-v02274)
|
||||
- [v0.22.73 Round-Up: Worldbuilding and Maps — Marriage Type, Friendlier Place Hierarchies, and Real-World/Fictional Map Separation](#v02273-round-up-worldbuilding-and-maps--marriage-type-friendlier-place-hierarchies-and-real-worldfictional-map-separation-v02273)
|
||||
- [v0.22.72 Round-Up: Two 0.22.71 Regressions, a Timeline Crash, and Place-Type Reorder Refinements](#v02272-round-up-two-02271-regressions-a-timeline-crash-and-place-type-reorder-refinements-v02272)
|
||||
|
|
@ -207,6 +208,26 @@ For version-specific changes, see the [CHANGELOG](../CHANGELOG.md) and [GitHub R
|
|||
|
||||
## v0.22.x
|
||||
|
||||
### v0.22.75 Round-Up: GEDCOM Date Interpretation, Living-People Superlatives, and a Mistyped-Value Data Quality Check (v0.22.75)
|
||||
|
||||
A worldbuilding- and data-quality-focused release. GEDCOM import gains per-format control over how ambiguous and event-labelled dates are read, living characters now appear in record superlatives measured against a new per-universe current date, and a Data Quality check finds and one-click-fixes type fields that were stored as numbers or dates. Fixes round out the release: hand-grouped families merge in the Collections tab, the default universe reaches people created outside the Create Person modal, post-create relationship actions work immediately, and a multi-value collection no longer blanks the views.
|
||||
|
||||
**Added: Data Quality check for mistyped property values** ([#758](https://github.com/banisterious/obsidian-charted-roots/issues/758)): A new "Fix mistyped property values" batch operation in the Data Quality tab scans entity notes for type fields (`cr_type`, `event_type`, `place_category`, `org_type`, `source_type`) that were stored as a number or date instead of text — for example `event_type: 1850`, which YAML reads as a number and which previously broke the map refresh. It lists each affected note and value and converts them back to text in one click. Surfaced from a suggestion by [@tenephor](https://github.com/tenephor) in [#746](https://github.com/banisterious/obsidian-charted-roots/issues/746).
|
||||
|
||||
**Added: Living people now appear in record superlatives** ([#749](https://github.com/banisterious/obsidian-charted-roots/issues/749)): The Statistics "Oldest people" record previously ignored anyone without a death date, so a long-lived living character could never top the list. Living people are now aged against a "current date" — today for real-world people, and a new per-universe **current date** (set in the Edit Universe dialog and the universe wizard) for fictional universes — and listed with a "(living)" marker. Real-world living ages are capped to keep a merely-missing death date from looking implausible; fictional universes are uncapped, and `cr_living` always includes a person. Raised by [@JakeTheLemon](https://github.com/JakeTheLemon).
|
||||
|
||||
**Added: Choose how ambiguous and non-standard dates are read during GEDCOM import** ([#718](https://github.com/banisterious/obsidian-charted-roots/issues/718)): The import preview now offers per-category date-interpretation controls, with counts so you can see how many dates each choice affects. Ambiguous slash dates (e.g. `05/06/1990`) can be read as day/month or month/day for the whole import, and dates carrying an event label (`Bapt`, `Buried`, …) can be imported or skipped. Leaving the controls untouched keeps the previous defaults. Builds on [#716](https://github.com/banisterious/obsidian-charted-roots/issues/716).
|
||||
|
||||
**Fix: Hand-grouped families now merge in the Collections tab** ([#761](https://github.com/banisterious/obsidian-charted-roots/issues/761)): People grouped by a manually-set group name (rather than biological links) appeared as separate one-person families in the Control Center's Collections tab, even though the Person Picker merged them correctly. The Collections tab — and its analytics, like the "smallest" collection — now merge components that share a group name, matching the Person Picker. Reported by [@DigitalDreamn](https://github.com/DigitalDreamn).
|
||||
|
||||
**Fix: Default universe now applies to people created outside the Create Person modal** ([#751](https://github.com/banisterious/obsidian-charted-roots/issues/751) follow-up): The default universe setting was only applied by the four "Create X" modals, so people created through the Create Family wizard — or added inline from the Edit Person modal — were left without it. Both paths now apply the default universe to brand-new people, matching the modals. Reported by [@DigitalDreamn](https://github.com/DigitalDreamn).
|
||||
|
||||
**Fix: "Add to this person" actions no longer fail right after creating a person** ([#757](https://github.com/banisterious/obsidian-charted-roots/issues/757)): After creating a person, clicking Add spouse / Add child / Add parent in the follow-up dialog could fail with "No person context available". The newly created person's id wasn't reliably available yet because the modal waited on Obsidian's metadata cache to catch up. The id is now established when the note is created, so the follow-up actions work immediately. Reported by [@pawel-k1200](https://github.com/pawel-k1200).
|
||||
|
||||
**Fix: A multi-value collection no longer blanks the views, and labels render cleanly in more places** ([#755](https://github.com/banisterious/obsidian-charted-roots/issues/755) follow-up): A `collection` set to a list of values (e.g. two collection names) caused the collections, people, and family chart views to come up empty. Label normalization now handles list values safely, and the wikilink-to-plain-text cleanup was extended to the Events universe filter, the Organizations universe column, and per-universe statistics counts. Reported by [@lomarcanys](https://github.com/lomarcanys).
|
||||
|
||||
**Stability-window impact:** v0.22.75's changes are additive items (the GEDCOM date-interpretation controls, living-people superlatives, and the mistyped-value Data Quality check) plus bug fixes (the Collections-tab family merge, the default-universe follow-up, the post-create relationship actions, and the multi-value collection normalization), with no breaking changes, all within the v0.22.59 stability window, so the window holds at its v0.22.59 anchor (2026-06-02).
|
||||
|
||||
### v0.22.74 Round-Up: Default Universe, Create Family, and a Map Crash Fix (v0.22.74)
|
||||
|
||||
A worldbuilding-convenience release. A new default universe applies itself to new notes so single-universe vaults stop typing it on every entity, the person right-click menu gains a one-click route into the family-creation wizard, and a cluster of fixes clears a map crash and a collection/universe duplication. The place-type hierarchy editor's insert-above choice from 0.22.73 now reliably takes effect.
|
||||
|
|
|
|||
Loading…
Reference in a new issue