Repository navigation
Record what a sector or age group used to be called - #2691
Merged
Merged
Conversation
maebeale
marked this pull request as ready for review
October 15, 2026 01:47
jmilljr24
approved these changes
Oct 15, 2026
jmilljr24
left a comment
Collaborator
There was a problem hiding this comment.
I like the model for this.
Will it still exist after the fm import? If not, can we open a blocked issue for its removal?
Collaborator
Author
|
@jmilljr24 i was thinking it'd be helpful to them post-import. and i was also thinking there's likelihood of other data coming out of the woodwork later that would need it. but yeah, if they think 100% not needed we can delete after for sure. |
maebeale
force-pushed
the
maebeale/tag-aliases
branch
from
October 15, 2026 12:22
1d6100f to
1eda3b3
Compare
Four systems collected who a facilitator serves, each with its own word list, and the portal's consolidation renamed and merged its way to one vocabulary — but nothing recorded how a legacy *input* becomes one of those tags. The Rolodex import has to answer that per value, and a forms backfill and Story Share migration will too, so the tables live in one place instead of three guesses. The deliberate non-mappings matter as much as the mappings: six FileMaker Settings describe where someone works rather than who they serve, and three Life Experiences have no sector yet. Both are recorded so the next reader doesn't invent a near-miss. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ADR-0007's tables have to live somewhere a lookup can read. A constant would mean a deploy every time the archive's free text turns up another spelling, and would vanish the day the imports are done — but what a tag used to be called is worth keeping after that, so TagAlias rows carry it instead. A row names one legacy term and the tag it resolves to, plus the system the term came from and who recorded it. A term that names two tags is two rows, which is how "C & T" reaches both Children and Teens. A term can also name nothing on purpose. Six FileMaker "settings" say where someone works rather than who they serve, and "Other" says nothing a tag could carry; recording those as ignored keeps ~2,800 mentions of them out of the queue of terms that genuinely need a decision. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A retired sector or age range is unpublished rather than deleted, so its old taggings survive — and resolving to one would hand it to hundreds of records that never had it. The live sectors table holds more than the catalogue: 634 archive rows name "Poverty", a retired row, which Sector.all would have quietly revived. A term that only matches a retired tag now reads as unresolved, which puts it in front of someone instead. The seeder reads the same published vocabulary, so a term aimed at a retired tag is reported rather than recorded as an alias that can never resolve. Serving families is serving every age, so FileMaker's "Families" age group tags all four age ranges rather than going unread — a person has no population tag to carry it on its own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four terms with real volume behind them: Poverty points at the retired
sector that already carries its taggings, Elder Abuse adds the Elders age
range, Children's Services makes Children the primary one, and war is left
untagged rather than filed under a sector it does not mean.
Two of those cross vocabularies — a life experience and a service area that
name ages, not sectors — so the lookup answers with both kinds and the caller
takes what it needs. Primacy stays the caller's call, since it follows from the
field a term sat in rather than from the term.
The compound cells ("Sexual Assault & Domestic Violence") resolve to every
sector they name, and the answers that say nothing — n/a, unsure, Everyone, the
delivery modes — are recorded as naming nothing, so the undecided queue is
short enough to read.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Most of the hand-typed cells are a venue, a programme name or a sentence about the work, and a term AWBW hasn't ruled on shouldn't masquerade as one it has. So the readable ones are recorded as proposed: they resolve, so no import waits on a review, and TagAlias.proposed is the list to walk with staff term by term. Around 90 terms, each worth one or two archive rows — Immigration Clinic, Grief support group, Supervised visitation sessions for foster youth, and the cells that name both sectors and the ages they serve. Another 16 say nothing a tag could carry and are proposed as naming nothing. Text that names an organization, a place that identifies one, or a facilitator's own circumstances is left alone: it's personal, and it belongs in the archive rather than copied into a catalogue. That leaves 23 terms, one mention each, unresolved for good — down from 150. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
maebeale
force-pushed
the
maebeale/tag-aliases
branch
from
October 15, 2026 12:32
1eda3b3 to
f103b8b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 suggested review level: 3 Read 📖 one new table and lookup, plus a seeder carrying the translation tables; no existing behavior changes
Four systems asked facilitators who they serve, each with its own wording — FileMaker, the older registration and scholarship forms, Story Share, and the portal's earlier sector list. The portal settled on one vocabulary, but nothing recorded how an old word becomes one of today's tags, so every import had to guess.
What is the goal of this PR and why is this important?
How did you approach the change?
docs/adr/0007— the translation tables, from the mapping spreadsheet plus the decisions AWBW made on the terms the spreadsheet didn't cover.TagAlias— one row per legacy term: the tag it resolves to (aSectoror anAgeRangeCategory), the system it came from, who recorded it, and whether it'signoredorproposed.TagTranslation#resolve— the lookup. Answers with both the sector ids and the age-group ids a term means.TagAliasSeeder/data:seed_tag_aliases— the tables as rows, idempotent, part ofdb:seed.Five decisions worth a look
Sector.allwould have resolvedPoverty— a retired row — and handed it to 634 more people by accident. A recorded alias is the opposite of an accident, soPovertystill reaches the sector that already carries its older taggings.Elder Abuseis a life experience that means the Elders age range;Children's Servicesis a service area that means Children. So#resolveanswers with both kinds, and primacy stays the caller's call since it follows from the field, not the term.C & T,Families(every age), and the compound cells likeSexual Assault & Domestic Violence.ignored): the Settings that say where someone works,Other,n/a, andPeople Who Have Experienced War, which AWBW chose to leave untagged rather than file under a sector it doesn't mean.What's proposed rather than decided
About 90 readings of hand-typed free text are marked
proposed—Immigration Clinic,Grief support group,Supervised visitation sessions for foster youth…. They resolve, so no import waits on a review, andTagAlias.proposedis the list to walk with staff. Anything naming an organization, a place that identifies one, or a facilitator's own circumstances is deliberately not read — that text stays in the archive.Anything else to add?
🤖 Generated with Claude Code