Adding an organized editorial library to an established website requires reading the existing navigation too. The two category tables in the inspected source assigned different meanings to the same ID. This maker’s note follows the decision to connect those tables without treating them as one catalog.

The question changed at the publication boundary

A recent human request in the source conversation extended the work from writing and validation to public deployment. Later final records report a deployment and public body checks. For this article I read the connecting implementation without running that job again. Authorization recorded in that other conversation is evidence about its work, not new deployment authority for this content routine.

Organizing an editorial workspace and adding its articles to an established site are different tasks. The workspace can use its own catalog. The established site already has navigation, article routes and an index that readers use. Treating matching IDs as matching meanings can impose one catalog over the other.

In the inspected tables, one shared number identified consultation guidance on one side and field observations on the other. These were different reader expectations, not simply alternate labels for the same category. The integration therefore needed to represent the difference explicitly before adding the new articles.

Choose a public connection instead of rewriting the source

Renumbering the source category would require reviewing its folders, editorial inventory and progress records together. Repurposing the existing public category could change how already published material is grouped. The inspected publisher reads the source classification and applies the different category ID to the projected public article object.

Its publication record retains originalCategoryId, while categoryId in the public article can identify a different destination. That keeps two questions answerable: where the manuscript came from and where the visitor will find it. I see this small connecting layer as a way to maintain source organization and public navigation without forcing both to use one identifier system.

The lesson is not that every internal field must become public. Folder identifiers and visitor-facing menus serve different purposes and can be connected differently. The relationship should nevertheless remain inspectable in the appropriate record. Discarding the source identity would make later editing and reconciliation harder.

Explore the implementation

Mapping shape in the new synthetic example

{
  "source_category_id": "section-a",
  "public_category_id": "section-b",
  "route": "/journal/new/",
  "note": "Source identity and article route remain; public category is projected separately."
}

A category projection does not require a new article address

The inspected publisher does not recalculate route when it changes the projected categoryId. It retains the route already present in the article object. This avoids assuming that a public category identifier must always regenerate the article address. Grouping an article under a menu and changing the location readers use to reach it are separate operations.

The combined list of new and existing articles is then checked for duplicate routes. A correct category mapping does not make two articles at the same address safe. Category insertion checks and article route collision checks protect different parts of the integration. This describes the source contract; I did not perform a new survey of every old address on the original site.

The earlier article about stable URLs examined old links and redirect responses. The focus here is earlier in the pipeline: connect source and public categories without casually regenerating article routes. If a real address migration is needed, its redirect policy and observed public responses require their own implementation and verification.

An ID check alone leaves a slug collision unchecked

When adding public categories, the source compares both id and slug with the existing catalog. Different IDs can still compete for the same category slug. The implementation therefore stops when either identifier is already occupied. It inserts a fixed set of new categories; it does not infer that two business concepts can safely merge.

The shared helper develops this into an independent input contract. Instead of hardcoding the original numbers, it receives source-to-public mapping rules. Reusing a public category requires an equal ID, slug and declared meaning. A conflict does not trigger an automatic search for a different unused number.

Semantic agreement still belongs to a human or an upstream editorial process. The helper’s meaning field records that declaration as a string. It does not read the articles and guarantee their topic. Showing exactly which values were compared keeps automatic projection separate from the decision that made the mapping appropriate.

A projected inventory is not a completed release

The original publisher selects candidates using the editorial queue’s validation state and manuscript hash. It also refuses to proceed if an already public article disappears from that selection. Building a category projection does not immediately set published to true: the candidate record retains a pre-publication state. Reading source material, preparing an inventory and observing a public result are distinct stages.

The source conversation’s final records report deployment and address checks for their executions. I did not rerun the original publisher or original tests for this article. Customer manuscripts and the supplied source corpus were not copied into this public explanation. The evidence reviewed here consists of selected code, instructions, test source and the associated maker decisions.

The shared helper likewise always returns performs_write_or_publish as false. A valid mapping is not content review, release authorization, deployment or successful public access. The function supplies one inspectable part of a proposed public inventory before any integration is allowed to change an established site.

Leave a reusable boundary for the next site

The independent implementation’s 24 tests cover source identity, the existing public catalog, reuse and convergence, ID/slug/route conflicts, missing mappings and preserved inputs. Five execution records contain one accepted projection and four rejection cases. Extraction checks rerun those same 24 methods; they do not create additional distinct tests to count.

The result selector displays stored records. DOM stubs check initial display and each selection in both languages, separately from real browser layout or keyboard review. The existing route module can be reviewed for path generation and file or sitemap reconciliation. The new namespace helper does not duplicate that layer.

For another site, first obtain its current public catalog and article route inventory. Decide where each editorial category should appear publicly, test that relationship, then hand it to the established publication procedure. The structure convenient for maintaining material can differ from the structure useful to readers. Keeping their connection explicit makes further growth easier to explain and maintain.