Post-cutover: migrate body-heavy entities to gitsheets v1.2 content-typed (markdown) records
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Refactorización
- Claridad
- Bien especificado
- Estado de actividad
- Tranquilo
- Stack tecnológico
- markdown, typescript
- Área
- api, backend, databases, documentation
Línea de trabajo
Comienza con los esquemas de packages/shared/src/schemas/ y las configuraciones .gitsheets/.toml; después, inspecciona apps/api/src/store/memory/loader.ts para las lecturas sin body y las lecturas de detalle. Sigue los serializadores, la canalización de FTS, import-laddr.ts, scrub-data.ts y el script planificado migrate-to-content-typed.ts. Se considera terminado cuando las entidades enumeradas usan el nuevo formato markdown, las lecturas y los índices gestionan bodies cargados de forma diferida, los datos existentes se migran de forma segura y ambas especificaciones están actualizadas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
gitsheets v1.2.0 added content-typed records — sheets opt into format.type = 'markdown' to store records as .md files with TOML frontmatter and a designated body field. Plus lazy body loading via query({ withBody: false }).
This is the biggest one-time upgrade we'd take from the gitsheets 1.x line. Not urgent — defer to after cutover-prep ships so we're not refactoring entities mid-migration.
Why migrate
- Snapshot is actually-readable. Contributors cloning
codeforphilly-data-snapshotsee real.mdfiles in any markdown viewer — instead of parsing TOML records to find the prose. - Authoring via PR. Staff / maintainers can edit a project overview in any markdown editor and PR it; currently they roundtrip through the API.
- Listing performance.
queryAll({ withBody: false })on hot paths: projects-index, activity feed, FTS seeding, snapshot scrub. - Indexes stay fast. Index builds use body-less reads natively in v1.2.
What changes
Entities with substantial body content:
Project—overview(markdown body),summary(short markdown) → migrateoverviewas the body field, keepsummaryin frontmatterProjectUpdate—body(markdown) → migratebodyas the body fieldProjectBuzz—summary(markdown) → migrate as bodyPerson—bio(markdown) → migrate as bodyHelpWantedRole—description(markdown) → migrate as bodyTag—description(markdown, short) → optional; cheaper to leave as TOML field
The migration is bounded; entities without long bodies (ProjectMembership, SlugHistory, Revocation, TagAssignment, HelpWantedInterestExpression) stay as TOML records.
Tasks
- Schema reshape in
packages/shared/src/schemas/— one designated body field per content-typed entity (rename or restructure the existingoverview/body/bio/description/summaryfields). - Update
.gitsheets/<sheet>.tomlconfigs with[gitsheet.format] type = 'markdown' body = '<fieldName>'. - In-memory loader in
apps/api/src/store/memory/loader.ts— use{ withBody: false }for index-building reads; lazy-load viaSheet.loadBody(record)when serving record detail responses. - Serializers in
apps/api/src/services/serializers/—*Html/*Excerptderived from the body field instead of the legacy string field. - FTS pipeline in
apps/api/src/store/fts.ts— body included in the indexed text via lazy-load batch. apps/api/scripts/import-laddr.ts— write the new markdown format for migrated entities.apps/api/scripts/scrub-data.ts— the snapshot now contains real.mdfiles; verify the scrub still strips PII correctly across the new file shape.- The data repo's existing TOML records need migration once — write a one-shot
apps/api/scripts/migrate-to-content-typed.tsthat reads existing records and rewrites as.mdper the new format. - Update
specs/behaviors/markdown-rendering.mdandspecs/data-model.mdto reflect content-typed entities.
Why defer
cutover-prepis next and depends on every other plan; this would invalidate frozen plans (storage-foundation,read-api,write-api,laddr-import,public-snapshot-scrub).- The benefit is real but landing is post-cutover work, not pre-cutover refactor.
Out of scope
gitsheets checkpre-commit hooks belong in the data repo, not this code repo.- The bundled Claude Code skill at
node_modules/gitsheets/skills/gitsheets/is available once we bump the dep range; future plans touching gitsheets can load it.
- Lenguaje dominante
- TypeScript
- Estrellas
- 1
- Forks
- 1
- Merge medio
- 11 min
- PR fusionados (30 d)
- 22
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de CodeForPhilly/codeforphilly-ng
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
CodeForPhilly/codeforphilly-ng#178 ·
Los mantenedores suelen responder en 1 día
-
MarkdownEditor toolbar: use Radix Toolbar from radix-ui instead of the hand-rolled roving tabindexAbiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
CodeForPhilly/codeforphilly-ng#169 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
CodeForPhilly/codeforphilly-ng#89 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
CodeForPhilly/codeforphilly-ng#87 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
CodeForPhilly/codeforphilly-ng#50 ·
Los mantenedores suelen responder en 1 día
Todos los issues de CodeForPhilly/codeforphilly-ng
Issues similares
-
area/dashboard kind/bug QA/dev-automation
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
rancher/dashboard#19379 · 2 comentarios ·
Los mantenedores suelen responder en 5 días
-
perf(core): getComments() runs the approved count and the comment list as two sequential queriesAbiertoarea/core bot:bug bot:working
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
emdash-cms/emdash#3905 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
lingdojo/kana-dojo#31728 · 1 comentario · 5 reacciones ·
Los mantenedores suelen responder en 1 día
-
selective-claw: freshTailTurns=0 keeps ALL turns verbatim and summarizes none (slice(-0) === slice(0))Posiblemente ocupada @zjncs la tomó hoy. Abiertocomponent:tokenless
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
agentic-os-org/ANOLISA#6112 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
rjsf-team/react-jsonschema-form#5439 ·
Los mantenedores suelen responder en 1 día