llm-wiki-public-private-routing
Firewall between the public llm-wiki repo (vamseeachanta/llm-wiki, MIT + CC-BY-4.0) and per-client private wikis (vamseeachanta/llm-wiki-<client>, e.g. llm-wiki-mkt-a per #2746). Use when (1) deciding whether a converted wiki page lands in public or private surface, (2) applying the project-name abstraction rule to public-bound content, (3) evaluating the public- availability exception that lets actual project names pass through unmodified, (4) promoting content from private to public after sanitization. Encodes the 2026-05-20 user routing directive verbatim: exact client results → private; abstracted (project-name only) → public; project name + all key data publicly available → exception applies. Companion to research/llm-wiki-page-shape-contract (which calls this skill at Rule 8) and research/llm-wiki-source-extraction-coverage (which produces the source pages this skill decides where to send).
Best use case
llm-wiki-public-private-routing is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Firewall between the public llm-wiki repo (vamseeachanta/llm-wiki, MIT + CC-BY-4.0) and per-client private wikis (vamseeachanta/llm-wiki-<client>, e.g. llm-wiki-mkt-a per #2746). Use when (1) deciding whether a converted wiki page lands in public or private surface, (2) applying the project-name abstraction rule to public-bound content, (3) evaluating the public- availability exception that lets actual project names pass through unmodified, (4) promoting content from private to public after sanitization. Encodes the 2026-05-20 user routing directive verbatim: exact client results → private; abstracted (project-name only) → public; project name + all key data publicly available → exception applies. Companion to research/llm-wiki-page-shape-contract (which calls this skill at Rule 8) and research/llm-wiki-source-extraction-coverage (which produces the source pages this skill decides where to send).
Teams using llm-wiki-public-private-routing should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/llm-wiki-public-private-routing/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How llm-wiki-public-private-routing Compares
| Feature / Agent | llm-wiki-public-private-routing | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Firewall between the public llm-wiki repo (vamseeachanta/llm-wiki, MIT + CC-BY-4.0) and per-client private wikis (vamseeachanta/llm-wiki-<client>, e.g. llm-wiki-mkt-a per #2746). Use when (1) deciding whether a converted wiki page lands in public or private surface, (2) applying the project-name abstraction rule to public-bound content, (3) evaluating the public- availability exception that lets actual project names pass through unmodified, (4) promoting content from private to public after sanitization. Encodes the 2026-05-20 user routing directive verbatim: exact client results → private; abstracted (project-name only) → public; project name + all key data publicly available → exception applies. Companion to research/llm-wiki-page-shape-contract (which calls this skill at Rule 8) and research/llm-wiki-source-extraction-coverage (which produces the source pages this skill decides where to send).
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# llm-wiki public/private routing
The firewall between client-attributed and abstracted content. Routes
converted wiki pages to the correct repository surface and enforces the
project-name abstraction rule with its public-availability exception.
This skill is invoked by `llm-wiki-page-shape-contract` Rule 8 before any
public-wiki commit. It is NOT optional — every page bound for public
`llm-wiki` clears this gate first.
---
## The two surfaces
| Surface | Purpose | License | Content posture |
|---|---|---|---|
| `vamseeachanta/llm-wiki` (public) | Trunk for code, client work, chatbots; improvable via public + legally-sanitized private sources | MIT (code) + CC-BY-4.0 (content) | Sanitized, abstracted, defensible-public |
| `vamseeachanta/llm-wiki-<client>` (private, per [#2746](https://github.com/vamseeachanta/workspace-hub/issues/2746)) | Exact client + project + raw numbers retained for project work | proprietary | Full fidelity, no abstraction needed |
Both surfaces follow the same page-shape contract (Skill A). They differ
only in routing rules.
---
## The routing rule (verbatim from 2026-05-20 user directive)
> "Exact client results will go into llm-wiki-`<client>` private repo;
> project name, client name abstracted results will go into llm-wiki
> public repo."
>
> "Only client project names are to be abstracted. If project name is
> available public, can be used in the llm-wiki public repo provided all
> key data is publicly available."
### Decoded routing matrix
| Content type | Public llm-wiki | Private llm-wiki-`<client>` |
|---|---|---|
| Industry-standard reference (OCIMF MEG, DNV, API, ISO) | YES — cite section + edition | YES — same |
| Public methodology, generic algorithm | YES | YES — usually duplicative; prefer linking from private to public |
| Anonymized worked example | YES | YES |
| Client-attributed calc results (specific project, specific operator) | NO | YES |
| Project name (default) | abstracted (e.g., "Project Alpha") | actual name |
| Project name (public-availability exception applies) | actual name OK | actual name |
| Client name | governed by `.legal-deny-list.yaml` — typically abstracted to "the operator" / "the contractor" / unspecified | actual name |
| Raw numerical results (specific tensions, specific frequencies, specific dimensions) | sanitized to ranges or removed | actual values |
| Methodology + abstracted illustrative numbers (e.g., "typical deepwater mooring tensions cluster around 60–80% MBL") | YES | YES — link to private exact-value page |
---
## The abstraction surface (public-bound content)
**By default, abstract client project names** in public-wiki content.
Examples:
- `B1528 proj-a` → `Project Alpha` (or `a deepwater FSO project`)
- `mkt-a/<specific project>` → `a marine engineering project`
- specific platform name → generic platform-class descriptor
### What is NOT in the abstraction surface
- **Industry-standard names** (DNV-OS-E301, API RP 2SK, OCIMF MEG, ISO 19901): never abstracted
- **Standard editions / revisions**: never abstracted (defensibility requires explicit edition)
- **Public operators in public roles** (e.g., regulatory filing data — operator named in the filing): not abstracted per the exception below
- **Generic methodology**: no abstraction needed (no client tie)
- **Open-source code / library references**: not abstracted
### What IS in the abstraction surface
- **Client project names** (engineering project identifiers, internal codenames)
- **Project-specific numerical results** (only the specific values, not the methodology)
- **Project-specific dimensions / configurations** when they would identify the asset
Client *identity* (the operator company) is governed by
`.legal-deny-list.yaml` and `.claude/rules/legal-compliance.md` — this
skill does not relax those rules.
---
## The public-availability exception
A project name can be used **as-is** in public llm-wiki when **both** of
the following hold:
1. **Project name is in the public domain**, evidenced by at least one of:
- SEC filing (10-K, 10-Q, 8-K, S-1) naming the project
- Operator press release naming the project
- Conference paper (OTC, SPE, OMAE, ISOPE) naming the project
- Regulator record (BSEE, BOEM, NOPSEMA, PSA, NSTA) naming the project
- Public reservoir / pipeline database entry (e.g., BSEE production records)
- Project's own public-facing website
2. **All key data being cited is also publicly available**, evidenced by:
- The data appears in the same public source as the project name, OR
- The data appears in a separate public source (conference paper, regulator filing) that can be cited alongside
- "Key data" means: any numerical result, dimensional spec, or
operational parameter the wiki page presents as derived from the
project
**Both conditions, or the project name gets abstracted.** Name-only
public availability without data backing fails the exception. Data-only
without project-name backing has nothing to exception away — abstract the
name as usual.
### Worked examples of the exception
| Scenario | Verdict |
|---|---|
| Project "Vito" named in Shell 2023 press release + OTC 2023 conference paper with field data → reference these to discuss tieback methodology | EXCEPTION APPLIES — use "Vito" as-is, cite both sources |
| Project named in Shell press release; numerical results from internal calc → derive methodology page | EXCEPTION DOES NOT APPLY — name in public, data is not → abstract the name |
| Internal client codename + conference paper with sanitized data from the same project | EXCEPTION DOES NOT APPLY — codename not in conference paper, abstract |
| OCIMF MEG3 sign-convention discussion, no project tie | NO ABSTRACTION NEEDED — pure methodology, no client surface |
---
## Pre-promotion decision tree
For each page bound for public llm-wiki:
```
page bound for public llm-wiki
│
├── Page references a client project name?
│ │
│ ├── NO ──────────────────────────────► commit to public (no abstraction needed)
│ │
│ └── YES
│ │
│ ├── Is the project name publicly available?
│ │ (SEC / press release / conference paper / regulator filing / public DB)
│ │ │
│ │ ├── NO ──────────────────► ABSTRACT project name → commit
│ │ │
│ │ └── YES
│ │ │
│ │ ├── Is ALL key data also publicly available?
│ │ │ │
│ │ │ ├── NO ──────► ABSTRACT project name → commit
│ │ │ │
│ │ │ └── YES ─────► EXCEPTION APPLIES → use actual name, cite public source(s)
│
└── Page also references client identity (operator, contractor)?
│
├── Refer to `.legal-deny-list.yaml` and `.claude/rules/legal-compliance.md`
└── Not governed by this skill
```
When in doubt: **abstract**. The exception is opt-in with evidence, not
opt-out.
---
## Pre-promotion checklist (public-bound page)
- [ ] Page references a client project name? (yes / no)
- [ ] If yes: is project name in public domain? (cite sources, otherwise abstract)
- [ ] If public domain: is all key data publicly available? (cite sources, otherwise abstract)
- [ ] If exception applies: public sources cited explicitly in the page's `## Sources` section
- [ ] No raw numerical results that would identify a specific asset (sanitize to ranges or remove)
- [ ] No filenames / paths referencing client-private directories (`mkt-a/`, `<client>-projects/`)
- [ ] Client identity (operator company) check passes `.legal-deny-list.yaml`
- [ ] `bash scripts/legal/legal-sanity-scan.sh --diff-only` returns PASS
- [ ] Page's commit message records abstraction verdict: `abstraction: applied | not-needed-exception-met | not-applicable-public-standard-only`
---
## Promotion from private to public
If a private-wiki page should also exist in public form:
1. **Copy, don't move** — the private page stays as the canonical
client-attributed record
2. Create a new public page (different slug, abstracted content)
3. Run the full pre-promotion checklist
4. Cross-link: private page can wikilink to its public counterpart for
"see also the abstracted version"; public page MUST NOT link back to
the private page (the private repo is invisible to public readers)
5. Commit message on the public-wiki side: `abstraction: applied; source private llm-wiki-<client> page-id <id>` — the source reference stays in the commit message only, never in page body
### Anti-pattern: replace-with-abstraction
Do NOT delete the private page after promoting an abstracted copy. The
private page is the audit-trail; the public copy is the share-out.
---
## Anti-patterns
- **Name-substitution without data-substitution** — replacing "B1528 proj-a" with "Project Alpha" while keeping a specific tension envelope from B1528. The number identifies the asset.
- **"Public domain" by hand-wave** — "I think it's been mentioned somewhere" doesn't qualify. Cite the source.
- **Per-page abstraction without checklist** — judgment calls drift across pages. Use the decision tree.
- **Abstracted page in private wiki** — abstraction has no purpose in the private surface; just write the actual name. (Private→public copies are the exception.)
- **Exact-name page in public wiki without exception verification** — the abstraction gate must clear; either abstract or document the exception.
- **Promotion via `git mv`** — never. Copy the file with a new slug to public; private original stays.
- **Self-approving the exception** — when the exception is borderline, route through audit per Skill B and defer to user.
---
## Hand-off back to `research/llm-wiki-page-shape-contract`
Once routing is decided and the abstraction gate cleared:
```bash
# Public commit:
git -C /mnt/local-analysis/llm-wiki commit -m "wiki(<domain>): <slug> — <one-line>
abstraction: applied | not-needed-exception-met | not-applicable-public-standard-only
Refs: <upstream issue>
" -- wikis/<domain>/<page>.md wikis/<domain>/index.md wikis/<domain>/log/YYYYMMDD.md
# Private commit (per-client repo):
git -C /mnt/local-analysis/llm-wiki-<client> commit -m "wiki: <slug> — <one-line>
source: <upstream issue> | <upstream artifact path>
" -- wikis/<domain>/<page>.md wikis/<domain>/index.md wikis/<domain>/log/YYYYMMDD.md
```
Pathspec form per `feedback_multi_agent_commit_serialization`.
---
## What this skill is NOT
- Not a replacement for `.legal-deny-list.yaml` — that enforces client
identity rules; this skill adds the project-name layer above
- Not a replacement for `coordination/client-llm-wiki-factory` — that
skill creates the private-wiki repo infrastructure; this skill governs
routing decisions within the infrastructure
- Not a replacement for the data-layer boundary ([#2727](https://github.com/vamseeachanta/workspace-hub/issues/2727)) — that defines what content is wiki-eligible at all; this skill decides which wiki
- Not for `.gitignore` / `.git` firewall mechanics — those are repo
configuration, governed by `feedback_per_repo_metadata_is_firewall`
## Related must-fire rules
- `feedback_service_provider_data_routing` — 6-row matrix; vendor brochures → off-repo; SEC / conference / regulator → public
- `feedback_per_repo_metadata_is_firewall` — license + .gitignore + per-repo .claude + .git are the file-system firewall
- `feedback_credential_issuer_copy_paste_leak` — never commit raw "save this token" output; same hygiene applies to client identifiers
- `feedback_external_permission_email_hygiene` — when a rights-holder approval email is supplied, record the minimum permission/citation conclusion needed for traceability; do not persist personal contact details, and do not inflate “citation looks appropriate” into unlimited bulk-copy permission
- `feedback_never_offer_to_self_label_plan_approved` — borderline exception cases route through user, not self-approval
- `feedback_offrepo_intel_routing` — for published repos, side-channel notes go to `/mnt/ace/<repo-name>/docs/`, not in-repoRelated Skills
public-knowledge-graph-governance
Maintain public-safe knowledge graph artifacts for llm-wiki and similar markdown knowledge bases. Use when changing graph generators, validators, schema docs, weekly freshness checks, or public/private source-scope boundaries.
llm-wiki-weekly-freshness
Class-level governance workflow for keeping llm-wiki-style markdown knowledge bases current, public-safe, graph/index-valid, and useful for code development. Use when reviewing llm-wiki architecture/content, scanning new LLM concepts, maintaining public knowledge graphs, producing an issue roadmap, or running recurring freshness cadence.
llm-wiki-source-extraction-coverage
Doc-type-aware extraction contract for llm-wiki source ingestion with measurable coverage and source-anchored traceability. Use when (1) ingesting a PDF, DOCX, XLSX, PPTX, HTML, or scanned-image source into a wiki `sources/` page, (2) computing the pre-extraction estimate (what fraction of the source we expect to recover) and post-extraction yield (what fraction we actually recovered), (3) anchoring wiki claims back to specific page / paragraph / cell / slide positions in the source so a reviewer can re-verify or revise against the actual document, (4) deciding whether OCR fallback or manual transcription is needed. Codifies workspace-hub's existing OCR fallback chain and python-docx / openpyxl / trafilatura patterns into a format-specific routing table. Companion to research/llm-wiki-page-shape-contract (Rule 7 input-layer pages) and research/llm-wiki — this skill is the defense against silent extraction failure.
llm-wiki-page-shape-contract
Enforce the page-shape contract when a repo-side document or analysis output gets converted into an llm-wiki page. Use when (1) running `scripts/knowledge/llm_wiki.py ingest`, (2) writing or rewriting a wiki page from docs/reports/*, docs/handoffs/*, scripts/review/results/*, or calc citation outputs, (3) deciding whether a page should be split into a folder of sub-pages, (4) reviewing wiki PRs for length / diagram / divide-and-conquer compliance. Codifies the Karpathy + Astro-Han + lewislulu page rules applied to workspace-hub's domain-wiki layout under /mnt/local-analysis/llm-wiki/wikis/<domain>/. Sibling to research/llm-wiki (which owns the CLI ops) — this skill is the quality gate every converted page must clear before commit.
llm-wiki-cadence-governance
Weekly governance workflow for keeping an llm-wiki repository current, code-development-useful, and connected to actionable GitHub issue planning.
llm-wiki-audit-feedback-loop
Durable feedback loop for correcting llm-wiki pages without losing the correction to chat history. Use when (1) a human notices a wiki page is wrong, outdated, or contradicts a source, (2) processing the `audit/` inbox of a domain wiki, (3) reviewing what feedback has been resolved vs deferred, (4) needing to leave a comment on a specific text range that survives line- number drift. Implements the anchored-text audit file pattern from lewislulu/llm-wiki-skill, adapted for workspace-hub's domain-wiki layout under /mnt/local-analysis/llm-wiki/wikis/<domain>/. Extends the 5-op model (compile/ingest/query/lint) from research/llm-wiki with the missing `audit` op. Never silently delete feedback — rejected audits stay archived with rejection rationale.
oss-wiki-development-arc
Three-phase methodology (Substrate → Depth → Quality) for building open-source engineering wikis efficiently. Skip 70%+ of empirical iteration cost by pre-loading the pattern.
client-llm-wiki-factory
Operator checklist for instantiating a new per-client private llm-wiki repo under workspace-hub [#2746](https://github.com/vamseeachanta/workspace-hub/issues/2746) + [#2731](https://github.com/vamseeachanta/workspace-hub/issues/2731) D4 (amended) naming convention `llm-wiki-<client>`.
metadata-only-wiki-sweep-workflow
Disciplined inventory process for cataloging documents by filename/path without content claims, using parent-centric grouping to prevent stub proliferation
exclude-wiki-Codex-md-from-harness-line-limit-hook
Fix false-positive pre-commit failures where workspace-hub's AGENTS.md line-limit hook blocks edits to auto-generated wiki schema files under knowledge/wikis/.
repair-legacy-llm-wiki-frontmatter-dates
Diagnose and repair legacy llm-wiki source pages that have ingested timestamps but are missing required added/last_updated frontmatter dates.
parallel-llm-wiki-gap-to-issues
Use parallel subagents to mine remaining LLM-wiki/document-intelligence gaps, de-duplicate against existing GitHub issues, then create only the strongest bounded follow-on issues.