feat(profiles): approve source origins for Microsoft, Mistral AI, xAI, and Cohere - #445
Merged
abdeslam-menacere merged 1 commit intoAug 27, 2026
Conversation
Adds tools/updater/profiles/origins/, a reviewed catalogue of human-approved publication origins for creators that have no dedicated profile. Microsoft, Mistral AI, SpaceXAI (x.ai) and Cohere are in the first batch; DeepSeek and Alibaba/Qwen are deferred with their reasons recorded. gate-source-approval.mjs refuses a citation to any origin the committed dataset and the profile catalogues do not already stand behind, and no panel vote overrides it, so approving a new host is a human act by design. These documents are that act. They approve origins only: no dataset JSON changes here, and populating the creators stays a separate refresh run. The documents join neither reviewed set. _reviewed_profile_paths skips directories, so load_profile_library does not see origins/ any more than it sees generic/. A creator here is therefore not promoted to a pilot creator and stays on the unanimous 3-of-3 long-tail bar. Microsoft is scoped to Microsoft-as-creator: the Phi family on the Microsoft Research blog and the MAI series on microsoft.ai. azure.microsoft.com and learn.microsoft.com are deliberately not approved, because Azure serves other creators' models and approving those origins invites exactly the collapse of creator into serving platform this repository forbids. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
abdeslam-menacere
deleted the
abdeslam-menacere-approve-long-tail-source-origins
branch
August 27, 2026 22:20
This was referenced Aug 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Approves source origins for four long-tail creators — Microsoft, Mistral AI, xAI, Cohere — so that a later data refresh can cite them. Closes #437.
This populates nothing. The
/tree/page will still render "No non-featured creators in the reviewed catalog." after this merges, correctly. It unblocks the refresh that comes next.What changed
Five files, additions only, all under a new
tools/updater/profiles/origins/directory:microsoft.jsonmicrosoft.ai,www.microsoft.com(bounded to/en-us/research/blog/)mistral-ai.jsonmistral.ai,docs.mistral.aixai.jsonx.ai,docs.x.aicohere.jsoncohere.com,docs.cohere.comREADME.mdTrusted origin union: 16 → 24. The two
huggingface.coentries add no new origin; they bound link-following.Why a subdirectory
The placement is the design, and it is load-bearing. Three consumers read
tools/updater/profiles/, and they enumerate it differently:origins/?gate-source-approval.mjs→catalogAnchor()git ls-tree -r(recursive)gate-evidence.mjs:165readdirSync, skips non-filesprofiles.py:364→_reviewed_profile_paths()iterdir(), skips non-filesSo the origins are visible to the trust anchor and invisible to the reviewed-creator sets. A top-level
microsoft.jsonwould instead breaktest_profiles.py'sEXPECTED_CREATORSand promote Microsoft to the 2-of-3 pilot review bar, which #437 places explicitly out of scope. The precedent already exists:profiles/generic/long-tail.jsonlives in a subdirectory for the same reason.QA proved the skip is load-bearing rather than incidental by hoisting
origins/microsoft.jsonto the top level: discovery count went 4 → 5, andload_profile_librarythen refused withProfileError - microsoft.json: missing required field 'creator'. The worst-case layout mistake fails closed rather than silently promoting a creator.Gate verdicts
Both gates ran against
b57a729, read issue text andgit diffonly, and never saw the developer's summary or session. Neither reviewed its own work.drydockis not installed in this environment, so no machine gate receipt exists and none has been hand-written. The issue comments are the authoritative record.Correction, made after this PR was opened. An earlier revision of this description claimed CI would run nothing at all for this change. That was wrong, and the error was mine: I enumerated
web-ci.ymlandskills-ci.yml, reasoned from those two, and never listed the full workflow set.updater-tests.ymlexists, triggers ontools/updater/**, and is running the pytest suite on this PR against Python 3.11 and 3.13. Leaving that claim standing would have understated the coverage a reviewer actually has.The accurate position is narrower, and still worth reading before trusting the checks:
web-ci^(web/|\.github/workflows/web-ci\.yml$)— and it is the only required check onmainskills-ci^(\.github/skills/|\.github/scripts/|\.github/workflows/skills-ci\.yml$|web/src/data/)updater-testspaths: tools/updater/**— the Python suite, on 3.11 and 3.13So the Python half is covered by CI. Two real gaps remain:
web-ciwill go green having executed nothing for this change, so branch protection is not evidence here.gates.test.mjsis wheregate-source-approval.mjs— the script this change actually depends on — is exercised, andskills-ciskips it.skills-ci.ymldocuments this against itself at lines 110–117: "a pull request confined to that directory skips gates the change would have failed. A green skip records that the gates did not run, never that they would have passed. Do not read one as coverage."The node gate results and the web result below were therefore run by hand, because nothing in CI runs them for this change. The pytest figures are reproduced by
updater-testson this PR.Real output
Run against
main+ this branch merged, re-run aftermainadvanced (see below):The 3 deselected are
test_live_publication.py(2) andtest_network_provider.py(1), excluded by pre-existingpyproject.toml:65config (-m 'not network and not live') because they perform real egress. Not hidden coverage.npm run validatewas run against the earlier merge base.git diff origin/main HEAD -- web/is empty — this branch changes no file underweb/— somain's own CI result carries unchanged.Mutation probes (QA) — every one tripped
origins/from the mergelearn.microsoft.com, subdomain squat, scheme swap, userinfo spoofx.ai@evil…openaicontrol exits 0, so the probe is not vacuousmainmoved twice under this branchBoth gate verdicts bind to
b57a729, which is unchanged, so they still hold. But the merge target moved froma052811→0556ec7→29acbda, and two of those commits touch machinery this change depends on. Rather than carry a stale result forward, everything was re-measured against the current tip:gate-source-approval.mjs— the exact script this change relies on. Verified it does not affect trust: its own docstring states "urlsis unchanged by that bookkeeping. Which origins this anchor approves is decided exactly as before." It splitsprofileFilesfromprofileCataloguesfor reporting.web-ci.yml. Verified the scope predicate is byte-identical, so the skip above still applies.main29acbda: still 16 → 24, same 8 origins.git merge-tree --write-treeagainst29acbda: exit 0, clean. No file in this branch overlaps anythingmainchanged.Deferred rather than guessed
api-docs.deepseek.comunreachable at verification time, a connection failure rather than a 4xx, so absence of evidence was not recorded as evidence of absence.learn.microsoft.com— deliberately withheld. Microsoft is simultaneously a creator (Phi, MAI), a serving platform (Azure), and a product vendor (Copilot); collapsing those would violate the entity-boundary rule.github.comstays trusted as code hosting only, not as Microsoft's announcement channel.x.ainow self-describes as "SpaceXAI LLC" (verified against the live<title>andog:title), andhuggingface.co/CohereLabsisisVerified: false, so it was declined.Known gaps, disclosed
origins/*.json. Set membership is guarded —test_profiles.py:35assertsEXPECTED_CREATORSagainst the real directory and fails on a leak (proven: 6 errors under mutation, clean on revert). But the new urls,trust_notesandallowed_pathsare unchecked by any suite. A future edit addingazure.microsoft.comwould be caught only by human review.allowed_pathsis advisory at this gate. Trust attaches atscheme://host; nothing intools/updater/src/parses these documents. Disclosed in the README rather than implied to be enforced.catalogAnchorswallows parse errors withcontinue. Pre-existing and fails closed, but newly load-bearing now that a second directory feeds it.cohere-docsandmistral-docsrecord a url outside their ownallowed_paths. Investigated and benign —meta.jsonandgoogle-deepmind.jsonalready do the same; it is the established "root entry point, link-following bounded to checked subsections" convention.Merge
This is outside ADR 0003's qualifying class —
gate-scope.mjsreports all five filesoutOfClass,"passed": false, exit 1, so it cannot auto-merge and must not. Auto-merge has deliberately not been enabled.The merge is a human's. The required check (
web-ci) will pass without executing anything for this change, so please weigh the hand-run node-gate output above and theupdater-testsresult rather than the green tick alone.