DataTalksClub / DataTalksClub/website

Complete the remaining legacy-main content adapter and route parity

Open
#39 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

content data-migration enhancement frontend integration needs grooming P0 seo testing
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Parent epic: #4

Normative authority:

Current PM disposition — returned to grooming / do not dispatch

The old issue body is superseded. It bundled already-delivered baked public rendering, the rejected staged ContentRelease activation model, Person resolution, Event/Course migration, and genuinely missing legacy-main collections. It also said that #39 depended on #38 and that Person resolution depended on #40 while #40 depended on #39. #40 has now removed that cycle. This issue is not engineer-ready until its remaining product boundary is split and pinned as described below.

Current origin/main is face8e4808d65afbf0374d1ced7a88079950d663. It already serves the checked baked public projection for articles, podcasts, books, Person details, Events, courses, Wiki, Docs, and FAQ through accepted owning issues. That is real current presentation behavior, but it is not evidence that the remaining legacy-main source adapter exists. content_sync has the dtc-content and course-repository adapters only; current URLConf has no tool or conference hub/detail routes.

The preferred checked projection on that SHA is also not a valid downstream binding: #253 proves that two clean exact regenerations agree with each other but differ from the checked tree on seven JSON members plus the S24E06/S24E07 asset-name pair. No #39 body may bless the current Person relationship census, projection tree, manifest, or cross-source output until #253 supplies an accepted reproducible envelope.

Exact ownership boundary

The following work is no longer owned by #39:

  • articles, podcast episodes/transcripts, books, and adopted media are DataTalksClub/content authority owned by the structured adapter and #253 recovery;
  • Person source identity, exact short resolver, aliases, and article/book/podcast/Event relationship resolution are #40; #39 may only carry opaque source person keys before #40 is accepted;
  • legacy _data/events.yaml is migration evidence only; Event schema/import/services belong to #289/#45 and events;
  • course editorial and operational rows belong to courses and the adopted CMP migration issues;
  • /slack is the current platform-owned onboarding/review surface, with /slack.html already a compatibility redirect; legacy slack.md is evidence, not authority to overwrite the account/Slack product;
  • homepage, sponsors, authentication, registration, support operations, Studio/admin API, search/Wiki/Docs/FAQ, and direct-sync orchestration/cutover remain with their owning issues;
  • no source file, generated projection, database row, public route, model, migration, network/provider state, or production data may be edited or inferred during grooming.

The remaining #39 product subject is legacy-main editorial content not otherwise adopted: the established tool and conference collections plus any additional legacy-main page/asset that an exhaustive reviewed source inventory explicitly classifies as #39-owned. The source authority is the immutable legacy-main revision DataTalksClub/datatalksclub.github.io@ee43d3fa0929faf691178d79f19528e6f15a83e5, tree 1666d11893a9f001e916409f3bac65a9ef0ff072. At that pin, _tools/*.md contains two records and _conferences/*.md contains two records. These observed counts do not by themselves approve a parser schema, exception list, asset set, route manifest, or output.

Dependency correction

  • Satisfied historical inputs: #34, #35, and #37.
  • No dependency on #38 for a bounded network-free source inventory/parser. #38 later consumes accepted adapters for direct sync and owns the source-specific public-authority cutover; it is not an adapter prerequisite.
  • No dependency on #40 for a Person-free source parser that preserves exact opaque short references without resolving them. Resolved maintainer/speaker behavior consumes accepted #40.
  • #253 is a hard prerequisite for any #39 slice that joins the structured content projection, binds final Person relationships, updates the checked projection/manifest, or changes public rendering/routes.
  • #40 is then a hard prerequisite for resolved Person links and transition behavior. #39 is not a prerequisite of #40.
  • A public database-read/direct-sync cutover additionally depends on #38's accepted source runner and owner-approved public-authority manifest. Baked-reader route delivery and database-authority cutover must not be conflated.

Source-only slice audit

No source-only #39 slice is currently groomed or authorized for engineering. A feasible independent slice exists, but it still needs an exact PM envelope. That envelope must be restricted to a deterministic, network-free inventory/parser for the two checked tools and two checked conferences (plus only explicitly enumerated owned assets), preserve opaque Person keys, and produce no public route, checked projection change, model, database write, direct-sync runner, Studio/API action, or provider access.

Before removing needs grooming, PM must record all of the following from the exact source pin:

  • complete selected and excluded path lists, file/status/count inventory, per-file SHA-256 values, tree digest, and source cleanliness/origin evidence;
  • exact normalized schemas for tool and conference records, ordered nested talks/tracks, URLs, Markdown/HTML/Liquid constructs, assets, and opaque Person keys;
  • fail-closed limits and diagnostics for YAML aliases/depth/nodes, traversal/symlink/submodule escape, unsafe HTML/scripts/URLs, duplicate keys/routes, missing required values/relations/assets, oversized inputs, and unknown schema variants;
  • the exact boundary between source bytes, normalized source records, later sanitized/rendered presentation, and #40 relationship resolution;
  • deterministic two-run output/evidence requirements and a reviewed exception list for every selected source file that does not import;
  • focused fixtures from both collections plus malformed/adversarial cases, a versioned verification plan, graph-selected broader gates, and independent tester/PM evidence requirements.

Later public/render slice

After #253 and #40 are accepted/integrated, PM must separately bind the exact final source/projection/relationship digests and groom the public tool/conference delivery. That later contract must state exact hub/detail canonicals and aliases, query/method/cache/404 behavior, internal links/fragments, canonical/Open Graph/JSON-LD/sitemap output, source-owned assets, no-JS behavior, responsive/keyboard states, and parity against the reviewed compatibility manifest. Template work must use the ordinary content_page.html shell and requires independent desktop/mobile screenshots.

Lifecycle and order

needs grooming remains. There is no #39 engineer handoff, frozen candidate, versioned verification report, independent tester PASS, PM acceptance, focused commit, merge, deployment, or on-call green evidence.

Order:

  1. PM may groom the strictly source-only four-record inventory/parser lane once the exact path/schema/asset/diagnostic envelope above is recorded; it remains non-rendering and carries opaque Person keys.
  2. Repair and accept/integrate #253, then finalize and accept/integrate #40.
  3. Re-groom #39's resolved relationship and public tool/conference render/parity lane against those exact outputs.
  4. Treat any later database/direct-sync public-authority cutover as #38-owned work with its separate HUMAN authority manifest.

Engineering must not start from a dirty or red baseline and must not reuse stale #39/#40/#253 hashes or lifecycle evidence.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Do not begin implementation: the issue remains in grooming. Read the pinned legacy-main source at DataTalksClub/datatalksclub.github.io@ee43d3fa0929faf691178d79f19528e6f15a83e5, especially _tools/.md and _conferences/.md, and define the bounded source-only inventory/parser lane. Done requires an exact PM envelope, deterministic network-free output, opaque Person keys, focused fixtures, and fail-closed diagnostics; it must not change routes, projections, models, or databases.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, content
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
18/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.