Skip to content

Public tree: no private repositories, sessions, people or instances; plans move out - #56

Merged
jallers merged 6 commits into
proposed_type_script_api_versionfrom
public-tree-no-private-references
Nov 14, 2026
Merged

jallers merged 6 commits into
proposed_type_script_api_versionfrom
public-tree-no-private-references

Conversation

@jallers

@jallers jallers commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

This repository is public and published to npmjs, but its tree named private repositories, Claude sessions, internal branches and pull requests, people, a real account, and hosted instances. This PR scrubs the tree, adds a mechanical check so nothing new is added, and sets out where that material lives instead.

Audit (confirmed and extended)

  • plans/001–005 and plans/handoffs/* (nine files): private repositories (three consumer projects and the product's source), session ids, internal branch names and PR numbers, people, the API-testing instance URL. The CLI consumer's repository was checked and is private, so it is treated like the others.
  • Source comments (src/types/oid.ts, src/services/{attachments,guard,batch,schema,resolve}.ts, src/wire/{assetApi,fields,rest1}.ts, src/types/asset.ts), test names and comments (test/unit/*, test/integration/*), CHANGELOG.md and README.md: consumer names, the product's source by name and file path, "verified live on ", the instance URL as the example base URL.
  • test/unit/client.test.ts and test/unit/rest1.test.ts: a real account's username, display name and member OID, and a maintainer's name, copied from live responses.
  • metamodel.json: the instance's path in 19,196 href/HREF values.
  • test/integration/instance.ts and spec 000 §5: the hosted testing instance in a committed allowlist.
  • test/integration/customFields.ts: product source file paths and a path on a personal machine.
  • src/core/clientConfig.ts and the README example: a production instance's URL as the documented example base URL.
  • Git history: 87 of the 89 commit messages on the branch name a private repository or a session.

What this PR does (six commits, in order)

  1. Scrub comments, tests and changelog. Consumers are "a CLI consumer", "a chat-bot consumer", "a browser app consumer"; the product's source is "the server"; the instance is "the API-testing instance". Fixtures keep the server's shape with fictitious identities.
  2. Metamodel. scripts/download-metamodel.mjs spells every href from /meta.v1/ (raw pulls untouched); the committed file is rewritten the same way; a test checks the rewrite and the committed file. Nothing in the SDK reads an href; the generated types are byte-for-byte unchanged.
  3. Integration allowlist from the environment. The hosted instances the tier may write to come from SDK_TEST_ALLOWED_INSTANCES (comma-separated base URLs) instead of a committed list. Same rule: local always, hosted only when allowed, V1Production never; it lives in test/integration/instanceGuard.ts with a unit test, and a refused URL says what to set. Live tier with the variable set: 40 passed, 3 skipped. Wherever the tier runs against a hosted instance, the cloud environment included, the variable is set beside the credential.
  4. The approach. CONTRIBUTING.md, a README pointer, and spec 000 §8. test/unit/publicTree.test.ts enforces it by shape, without listing any name: no session id, no repository slug under the product's organisations other than this one, no hosted instance URL. plans/ is skipped by the test until it leaves the tree.
  5. The alpha.6 changelog note from CI: actions on the Node 24 runtime; Node 22 or later #55 (merged after this branch was cut) named the three consumers; it is reworded by kind.
  6. No hosted instance URL at all. The example base URL (README, client config doc, metamodel script usage, unit-test fixtures) was the product documentation's production example; it is now a fictitious domain, and the public-tree test refuses any hosted instance URL, with no exception.

plans/ stays in this PR, by decision: it leaves the tree once the private planning repository exists, in a PR of its own. The branch is rebased on the current base (after #55). npm run verify is green at every commit: 26 files, 173 unit tests.

The approach

  • Plans live in a private planning repository in the versionone organisation; proposed name agility-sdk-planning, to be created by a maintainer. One file per plan, as today. A plan may cite this repository by commit, tag or PR number; this repository never cites a plan.
  • Hand-offs live with the consumer: a file in the consumer's own repository, or a message to the session working on it. Sessions hand work to each other by message, not by a committed file; the durable copy, if wanted, goes in the planning repository under handoffs/.
  • Findings come back here as issues, PRs, tests and changelog lines worded for the public; their origin stays in the planning repository.
  • Here: specs/ (invariants of this code, nothing private), CHANGELOG.md and README.md (they ship in the package), and docs/ for longer consumer-facing material when there is some. No docs/ directory is created in this PR because there is nothing to put in it yet.

History

The 87 commit messages that name private repositories and sessions are left as they are. The branch is public, the npm releases are tagged on it, and a consumer vendors builds by commit SHA, so history is not rewritten. The goal is to stop adding such names and to clear the tree; the test does the first and this PR the second.

Decisions taken

  • The allowlist stays in the environment.
  • The plans stay until the planning repository exists; the removal commit was dropped from this branch.

🤖 Generated with Claude Code

https://claude.ai/code/session_016NSWj6JhfcwPfucX8mr1jH

The consumer projects that drove the SDK's design are private; so are
the product's source and the API-testing instance. Comments, test names
and the changelog now say "a CLI consumer", "a chat-bot consumer", "a
browser app consumer", "the server" and "the API-testing instance"
instead. Unit-test fixtures copied from live responses keep their shape
but carry fictitious identities (a made-up member, a neutral example
base URL and the default dev-instance path).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NSWj6JhfcwPfucX8mr1jH
…ance

meta.v1 spells each href from the instance's own path, so the committed
metamodel carried the API-testing instance's name 19,196 times. The
download script now rewrites hrefs to start at /meta.v1/ (raw pulls are
left alone), the committed file is rewritten the same way, and a unit
test checks both the rewrite and the committed file. Nothing in the SDK
reads an href, and the generated types are byte-for-byte unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NSWj6JhfcwPfucX8mr1jH
The hosted instance set aside for API testing was named in
test/integration/instance.ts and in spec 000. Its URL is the instance's
name, and this repository is public, so the list now comes from
SDK_TEST_ALLOWED_INSTANCES (comma-separated base URLs), set beside the
credential by whoever runs the tier against a hosted instance. The rule
is unchanged: local always, hosted only when allowed, V1Production
never; it lives in test/integration/instanceGuard.ts, pure, with a unit
test. Without the variable a hosted URL is refused with a message that
says what to set. Live tier run with it: 40 passed, 3 skipped.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NSWj6JhfcwPfucX8mr1jH
…it goes instead

The repository is public and its history permanent, so working plans and
consumer hand-offs no longer live here: plans go to a private planning
repository, hand-offs to the consumer's own repository or to a message
between sessions, and findings come back as public-worded issues, pull
requests, tests and changelog lines. CONTRIBUTING.md says so and how to
refer to consumers, the server, instances and people. Spec 000 gains the
invariant, and test/unit/publicTree.test.ts enforces its mechanical
parts by shape (a session id, a repository slug under the product's
organisations other than this one, a hosted instance URL other than the
documentation's example) without listing any name. plans/ is skipped by
the test until it leaves the tree.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NSWj6JhfcwPfucX8mr1jH
@jallers
jallers force-pushed the public-tree-no-private-references branch from 97a3e30 to 04a7a90 Compare November 14, 2026 13:35
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NSWj6JhfcwPfucX8mr1jH
@jallers
jallers force-pushed the public-tree-no-private-references branch from 04a7a90 to 3415830 Compare November 14, 2026 13:35
The example base URL in the README, the client config doc, the metamodel
script's usage and the unit-test fixtures was the product documentation's
production example; an instance URL is an instance's name, so it is now
a fictitious domain. The public-tree test loses its one exception and
refuses any hosted instance URL.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NSWj6JhfcwPfucX8mr1jH
@jallers
jallers force-pushed the public-tree-no-private-references branch 2 times, most recently from ef21149 to e129d22 Compare November 14, 2026 13:47
@jallers
jallers merged commit 71194ae into proposed_type_script_api_version Nov 14, 2026
8 checks passed
@jallers
jallers deleted the public-tree-no-private-references branch November 14, 2026 13:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants