Skip to content

Commit 16bda4e

Browse files
hyperpolymathclaude
andcommitted
audit: Metadatastician transfer plan — 4 candidates, 4 excluded, 2 deferred
Plan document for transferring low-sensitivity private hyperpolymath repos to The-Metadatastician (Enterprise plan) to gain GHAS coverage. Candidates (4): ipv6-only, katagoria, network-ambulance, nextgen-typing Excluded always-private (4): 007, .git-private-farm, hyperpolymath-sovereign-registry, blog-drafts Excluded other (2): polystack (archived), repos-monorepo (workspace root — transfer changes URL for every submodule consumer) Proposed sequencing: dry-run → batch-1 (katagoria + nextgen-typing, lowest blast radius) → batch-2 (network-ambulance + ipv6-only, real content with public downstream subsets). 5 open questions documented for Jonathan greenlight. No transfers executed yet — this is plan-only. Transfers require user greenlight per the "cross-org actions need confirmation" safety rule. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 004053a commit 16bda4e

1 file changed

Lines changed: 205 additions & 0 deletions

File tree

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Metadatastician Transfer Plan
3+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
4+
#
5+
# Purpose: move private hyperpolymath repos that can tolerate
6+
# enterprise-internal visibility into The-Metadatastician org,
7+
# where GitHub Advanced Security (GHAS) coverage is available
8+
# on the Enterprise plan. Repos remain non-public; they gain
9+
# code scanning, secret scanning, and dependency review.
10+
#
11+
# Current posture:
12+
# - The-Metadatastician (login: `The-Metadatastician`) is on Enterprise
13+
# plan (999999 private repos, 50 seats, 1 filled). Owns 1 private + 2 public.
14+
# - hyperpolymath org holds 10 private repos (1 archived, 9 active).
15+
# - User is owner of both orgs (transfer authorisation available).
16+
#
17+
# Irreversibility profile (per `git remote` redirect): GitHub keeps
18+
# old URLs redirecting indefinitely, so SSH/HTTPS refs keep working. BUT:
19+
# CI webhooks that point at the org-name path (rare), hard-coded owner
20+
# references in workflow `uses:` (none for hyperpolymath-authored code),
21+
# and mirror-sync targets may need URL updates.
22+
23+
@abstract:
24+
Transfer plan for the 4 low-sensitivity private hyperpolymath repos that
25+
are good candidates for Metadatastician-internal status (unlocks GHAS).
26+
Four repos explicitly excluded as always-private (007, .git-private-farm,
27+
hyperpolymath-sovereign-registry, blog-drafts). One archived (polystack),
28+
one workspace-root (repos-monorepo) also excluded.
29+
@end
30+
31+
## Inventory — 10 private hyperpolymath repos
32+
33+
[[inventory]]
34+
name = "007"
35+
exclude = true
36+
reason = "always-private per memory: Claude-only language repo, agent meta-language"
37+
last_push = "2026-04-17"
38+
39+
[[inventory]]
40+
name = ".git-private-farm"
41+
exclude = true
42+
reason = "always-private per memory: hookset-sync hub with sensitive manifest data"
43+
last_push = "2026-04-16"
44+
45+
[[inventory]]
46+
name = "hyperpolymath-sovereign-registry"
47+
exclude = true
48+
reason = "always-private per memory: sovereign registry; decisional/governance content"
49+
last_push = "2026-04-17"
50+
51+
[[inventory]]
52+
name = "blog-drafts"
53+
exclude = true
54+
reason = "always-private per memory: unpublished blog drafts; premature disclosure risk"
55+
last_push = "2026-04-17"
56+
57+
[[inventory]]
58+
name = "polystack"
59+
exclude = true
60+
reason = "archived; superseded by boj-server. No ongoing security-signal value from transfer."
61+
last_push = "2026-04-04"
62+
63+
[[inventory]]
64+
name = "repos-monorepo"
65+
exclude = true
66+
reason = "Eclipse-drive workspace-root wrapper; submodule pointer tracker. Transferring changes origin for every submodule consumer. Too high-blast for this pass."
67+
last_push = "2026-04-17"
68+
review_next_pass = true
69+
70+
[[inventory]]
71+
name = "ipv6-only"
72+
exclude = false
73+
candidate = true
74+
size_kb = 45138
75+
description = "IPv6-only network profile tool (aerie/network). Dual-use with ambientops subset."
76+
last_push = "2026-04-17"
77+
rationale = "Already positioned as dual-use with a public subset downstream. Low-sensitivity code. Size ~45MB suggests real content worth scanning."
78+
79+
[[inventory]]
80+
name = "katagoria"
81+
exclude = false
82+
candidate = true
83+
size_kb = 373
84+
description = "(empty)"
85+
last_push = "2026-04-17"
86+
rationale = "Very small (373KB). Low disclosure risk. Empty description — recommend user confirm content before transfer."
87+
pre_transfer_check = "skim README + file listing to confirm no sensitive content hides under the size."
88+
89+
[[inventory]]
90+
name = "network-ambulance"
91+
exclude = false
92+
candidate = true
93+
size_kb = 413
94+
description = "Platform-independent complete internet repair tool — cross-platform successor to Windows Complete Internet Repair. Canonical in aerie; subset in ambientops."
95+
last_push = "2026-04-17"
96+
rationale = "Described as cross-platform successor to an existing public tool. Subset already extracted downstream. Low-sensitivity operational tool."
97+
98+
[[inventory]]
99+
name = "nextgen-typing"
100+
exclude = false
101+
candidate = true
102+
size_kb = 373
103+
description = "(empty)"
104+
last_push = "2026-04-17"
105+
rationale = "Very small (373KB). Low disclosure risk. Empty description — recommend user confirm content before transfer."
106+
pre_transfer_check = "skim README + file listing to confirm no sensitive content hides under the size."
107+
108+
## Proposed sequencing (dry-run first, then batched)
109+
110+
[[batch]]
111+
id = "batch-0-dry-run"
112+
description = "Dry-run inspection — no transfers executed. For each candidate, cat README + list top-level files + verify no secrets."
113+
commands = [
114+
"for r in ipv6-only katagoria network-ambulance nextgen-typing; do echo === $r ===; gh api repos/hyperpolymath/$r/contents/ -q '.[].name'; done",
115+
"for r in katagoria nextgen-typing; do gh api repos/hyperpolymath/$r/readme --jq '.content' | base64 -d || echo NO-README; done",
116+
]
117+
executes_transfer = false
118+
119+
[[batch]]
120+
id = "batch-1-tiny-repos"
121+
description = "Transfer the two tiny empty-description repos first, as the lowest-blast-radius test of the transfer mechanics."
122+
repos = ["katagoria", "nextgen-typing"]
123+
rationale = "If the mechanics break, failure is contained to 2×373KB repos with no stars/forks and no CI dependency."
124+
executes_transfer = true
125+
commands = [
126+
"gh api -X POST repos/hyperpolymath/katagoria/transfer -f new_owner=The-Metadatastician",
127+
"gh api -X POST repos/hyperpolymath/nextgen-typing/transfer -f new_owner=The-Metadatastician",
128+
]
129+
post_action = "verify redirect works: `git ls-remote git@github.com:hyperpolymath/katagoria.git` should resolve."
130+
131+
[[batch]]
132+
id = "batch-2-operational-tools"
133+
description = "Transfer the operational tool repos after batch-1 succeeds."
134+
repos = ["network-ambulance", "ipv6-only"]
135+
rationale = "Real content with public downstream subsets. Transfer unblocks GHAS code-scanning on the full internal version while the aerie/ambientops public subsets continue to ship normally."
136+
executes_transfer = true
137+
commands = [
138+
"gh api -X POST repos/hyperpolymath/network-ambulance/transfer -f new_owner=The-Metadatastician",
139+
"gh api -X POST repos/hyperpolymath/ipv6-only/transfer -f new_owner=The-Metadatastician",
140+
]
141+
post_action = "verify mirror-sync references still resolve; check CI webhook targets (if any) still fire."
142+
143+
[[batch]]
144+
id = "batch-3-deferred"
145+
description = "Repos-monorepo transfer deferred pending review."
146+
repos = ["repos-monorepo"]
147+
rationale = "Submodule-pointer workspace root. Moving it changes origin URL for every downstream submodule reference. Worth doing only if GHAS on the wrapper repo provides meaningful signal — probably not."
148+
executes_transfer = false
149+
decision_pending = "JONATHAN — is there value in scanning the wrapper monorepo, or is the signal entirely on the member repos?"
150+
151+
## Post-transfer checks (each transferred repo)
152+
153+
[[post_check]]
154+
id = "redirect-works"
155+
command = "git ls-remote git@github.com:hyperpolymath/<repo>.git 2>&1 | head -1"
156+
expect = "non-error output (GitHub redirects old-owner URLs)"
157+
158+
[[post_check]]
159+
id = "ghas-features-enabled"
160+
command = "gh api repos/The-Metadatastician/<repo> -q '.security_and_analysis'"
161+
expect = "secret_scanning + code_scanning = enabled (may need explicit enablement POST-transfer)"
162+
next_action_if_missing = "gh api -X PATCH repos/The-Metadatastician/<repo> -f 'security_and_analysis[secret_scanning][status]=enabled' -f 'security_and_analysis[code_scanning][status]=enabled'"
163+
164+
[[post_check]]
165+
id = "internal-visibility"
166+
command = "gh api repos/The-Metadatastician/<repo> -q '.visibility'"
167+
expect = "private (default on transfer) — must be changed to 'internal' via gh api -X PATCH -f visibility=internal if Enterprise tier supports it for this repo"
168+
169+
[[post_check]]
170+
id = "mirror-chain-updated"
171+
description = "Verify hub-and-spoke mirror system still points at the new upstream. Per memory: GitHub is single source of truth; mirror-sync is automated. Transfers change the canonical URL from github.com/hyperpolymath/X to github.com/The-Metadatastician/X — confirm the mirror system follows."
172+
owner = "JONATHAN or mirror-sync tooling"
173+
174+
## Open questions for Jonathan
175+
176+
[[question]]
177+
id = "q1-katagoria-content"
178+
text = "What is katagoria? Empty description, 373KB, 1 star. Confirm content is not sensitive before batch-1 executes."
179+
180+
[[question]]
181+
id = "q2-nextgen-typing-content"
182+
text = "What is nextgen-typing? Empty description, 373KB, 1 star. Same check as katagoria."
183+
184+
[[question]]
185+
id = "q3-repos-monorepo"
186+
text = "Transfer repos-monorepo to Metadatastician, or keep it at hyperpolymath as the workspace root?"
187+
188+
[[question]]
189+
id = "q4-ghas-features-post-transfer"
190+
text = "Post-transfer, should code_scanning + secret_scanning be auto-enabled via PATCH, or left to the default enterprise policy?"
191+
192+
[[question]]
193+
id = "q5-greenlight-batch-1"
194+
text = "GREENLIGHT batch-1 (katagoria + nextgen-typing)? This is the first destructive-ish action — everything prior is reversible via `gh api -X POST repos/The-Metadatastician/X/transfer -f new_owner=hyperpolymath`."
195+
196+
## Status
197+
198+
[[status]]
199+
as_of = "2026-04-17"
200+
plan_prepared = true
201+
dry_run_executed = false
202+
batch_1_executed = false
203+
batch_2_executed = false
204+
batch_3_executed = false
205+
awaiting = "Jonathan greenlight on open questions q1-q5"

0 commit comments

Comments
 (0)