Skip to content

content-model: podcasts - Map episode Markdown to runtime data #361

Open

Description

@ashleyshaw

Outcome

Map approved episode Markdown into the existing runtime podcast model.

Verified context

content/podcasts/ supplies episode metadata/show notes; data/types/podcast.ts expects additional numbering, category, image and optional transcript/guest fields. Sample audio is placeholder material.

Scope

Define and implement the module adapter using shared schemas/loading.

Acceptance criteria

  • Mapping covers identity, numbering, date, duration, taxonomy, audio, cover, guests, transcript, featured state and FAQs, with requiredness decisions.
  • Metadata/body retain source links and stable slugs; invalid records have actionable diagnostics.
  • Missing optional values and placeholder audio are handled without fabrication.
  • Fixtures cover publication filtering; factual verification remains under epic: podcasts - Verify and update podcast content #43.

Boundaries and sources

Creation defines work only; it does not start implementation. Preserve unrelated code, protected assets, editorial wording and existing records. Do not fabricate content, identity, media, manuscript chapters, dates or engagement data. Use approved repository-native authoring, validation, preview and publication decisions; do not provision an external CMS or database. Existing editorial verification remains with its current issues. All acceptance criteria remain unchecked until evidenced.

Repository evidence was inspected on develop at 4ecdb26d9655a48bf000a7c89da2f70383edce87. Recheck before implementation; no build or browser tests were run for this draft. Follow repository instructions and applicable Spec Kit requirements. Paths below refer to this repository.

Sources: repository instructions, application, editorial content.

Branch instructions

  • Repository: lightspeedwp/ThisOneTimeOnAcidCom
  • Proposed branch: feat/podcasts-markdown-adapter
  • Base: develop
  • Naming policy: local guide, validator, organisation strategy.
  • Pull request template: Organisation .github/PULL_REQUEST_TEMPLATE/pr_feature.md, per inspected local routing; recheck before opening a PR.
  • Constraints: Preserve unrelated changes; do not force-push, merge or deploy. Complete applicable Spec Kit requirements before implementation.
  • Conflicts or missing evidence: Proposed branch, not an existing branch; collision freedom is unverified. Recheck current branch routing and open governance changes, including PR automation: repo-governance - Add governance automation and validation #346. Older instructions claim branch rules are absent; the inspected local guide and executable validator establish the current convention. This draft creates no branch or pull request.

Branch instructions — batch 20 audit addendum

  • Repository: lightspeedwp/ThisOneTimeOnAcidCom; implementing target: this podcast-adapter issue and its verified counterpart, GitHub issue 361 in this repository.
  • Proposed branch: feat/podcasts-markdown-adapter; base: refreshed develop, checked at 4ecdb26d9655a48bf000a7c89da2f70383edce87 (D). Organisation baseline: 8f28eca80bff198879f7aaf496717dc0551bb32e (O).
  • Branch state: proposed new branch, not created/reused. Absent from returned remote branch inventory; no matching podcast/exact-head PR or Linear PR association found. Refresh before implementation; verify any discovered reuse candidate against ownership and actual scope.
  • Naming evidence: local guide and validator authorise feat and type/scope-title. Static inspection only; no validator executed.
  • PR template: shared Feature template, recommended by canonical routing. Suggestions/frontmatter do not establish inherited body loading or applied labels. Verify template selection before PR creation; no local/locked-template edits or automatic metadata changes.
  • Parent context: preserve coordination hierarchy; omit parent identifiers/links from branches, PR metadata and coding prompts. Never use the parent as a native development or closing target.
  • Allowed closing targets: none currently. Partial work cannot close this issue. Any future contextual reference/native association requires separate review; no linking syntax authorised here.
  • Governance PR346 remains context, not delivered baseline, implementation approval or a reuse branch. No repository edits, branch/PR operations, execution, force-push, merge or deployment authorised.

Expected file changes

Provisional implementation plan, not delivered code. Existing files/directories inspected at D; new destinations proposed.

Operation Path Intended change Evidence/revision Approval or dependency
Create, proposed src/app/utils/podcastContentLoader.ts Consume approved shared parsing/loading; map stable identity, metadata and unchanged Markdown show notes; return actionable file/field diagnostics and eligible list/detail results without invention D: four episode Markdown files and utils directory; loader absent Delivered shared contracts; publication/taxonomy/media decisions
Edit, conditional src/app/data/types/podcast.ts Represent agreed missing audio/cover/required-field states and distinguish notes, verified transcripts, guests and FAQs; preserve existing consumers D: required audio/duration/numbering/category/date/featured/cover; optional transcript/guests/FAQs Requiredness and compatibility approval; no silent downstream rewrites
Create, proposed src/app/utils/__tests__/podcastContentLoader.test.ts Controlled inline fixtures for list tags, malformed YAML, invalid fields, duplicate identities, missing values, placeholder audio, publication exclusion, lookup failures and source preservation D: utils parent inspected; proposed test directory/file absent; Jest excludes this TypeScript path Approved test discovery/transformation and loader contract
Create, proposed docs/podcast-content-contract.md Record source/runtime mappings, diagnostics, eligibility and routing/playback handoff D: docs directory inspected; destination absent Approved mapping/source-authority decisions; no editorial facts invented

No moves/deletions. All four inspected sources use podcast-episode, block-list tags and example.com audio; they omit numbering, category, cover and publication control. Do not infer numbering from IDs, publication from dates, substitute mock metadata or treat scripts as verified transcripts. Preserve source wording and image references.

Shared schema, validation and loading remain Todo; plans are not delivered dependencies. Existing journal parser has different path/profile assumptions; do not copy those or introduce Node-only dependencies into browser bundles. Current Jest excludes the proposed TypeScript test: harness/configuration/dependency work requires separate bounded approval.

Complete specification-first approval; no podcast specification verified. Constitution authority ambiguity and stale guidance need explicit decisions, not incidental repair. Routing/consumer wiring, playback and editorial verification remain their existing separate work; no expansion into those issues.

Exclude content migration/rewriting, protected assets/references, fallback component, attribution/changelog, Supabase, deployment, workflows and locked governance. Resolve changelog handling separately. No commands, installs, hooks, tests, builds or cloud operations performed. Extra paths/material changes require revised preview and approval. Exclude credentials/restricted content from public sync. Description approval changes no status, owner, labels, hierarchy or PR associations and grants no implementation authority.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Fields

Priority

None yet

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions