Skip to content

feat(shelf): T2–T4 books + Phase-4 policy — the wave's registry closes - #1675

Merged
4444J99 merged 1 commit into
mainfrom
feat/shelf-t2-t4-books
Jul 30, 2026
Merged

feat(shelf): T2–T4 books + Phase-4 policy — the wave's registry closes#1675
4444J99 merged 1 commit into
mainfrom
feat/shelf-t2-t4-books

Conversation

@4444J99

@4444J99 4444J99 commented Jul 30, 2026

Copy link
Copy Markdown
Member

The closing estate books of custody v4.0.0.

T2–T4 (ground truth already live): all eight shelves populated (~80 further transfers — THEORIA 12, POIESIS 18, TAXIS 18, LOGOS 3, KOINONIA 11, KERYGMA 5, meta 10, ERGON +2); every dot-github--X renamed .github (all seven shelf faces render); padavano → personal. Books: full shelf_assignments (127 placements), shelf_public class, 20 row re-keys + visual-substrate-inquiry judgment row, access never_grant re-keys, owners() glob-skip, org outside-rolls user-scoped. Live doctor: class P clean across all 8 shelves, N+O real verdicts at zero drift, census complete=true.

Phase 4: sauce_policy — the verdict derivation law (PRIVATE/SPLIT/GUARD/CLEAN derive from class + moat-guard + split registrations; enforcement = composition of shipped predicates; vox pair adjudicated independent-siblings). license_policy — the estate's first written license doctrine (all-rights-reserved default, per-surface posture, grants are judgment rows).

Gates: yaml valid · parity drift==∅ · verify-scoped PASS.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VHjMkFUZJ1pK21oyv1ropN

Summary by CodeRabbit

  • Governance

    • Expanded repository governance coverage across all organizational shelves.
    • Added policy rules for data handling, licensing, public visibility, archiving, and SEO settings.
    • Added governance classifications and overrides for additional repositories and workspaces.
    • Corrected repository access restrictions for moved repository namespaces.
  • Bug Fixes

    • Improved collaborator reporting by applying the appropriate access context.
    • Excluded wildcard-based ownership entries from ownership results.

…s live

THEORIA 12 · POIESIS 18 · TAXIS 18 · LOGOS 3 · KOINONIA 11 (contrib hub + 5 kept
forks) · KERYGMA 5 · meta-organvm 10 (all superprojects) · ERGON +2 = the whole
advertised backbone now holds its contents (~80 transfers, redirects live).
dot-github--X renamed to .github in each org — every shelf face renders. padavano
moved to the personal estate (the name-site belongs to the name). Archived stays
in the attic (attic doctrine); homebrew-limen stays engine-room (live brew tap).
Books: full shelf_assignments (127 placements), shelf_public class, 20 row
re-keys + visual-substrate-inquiry judgment row, access never_grant re-keys.
Census: owners() skips glob-derived prefixes; org outside-rolls route user-scoped
off the canonical org. Doctor: class P clean over all 8 shelves; N+O zero drift;
sole live drift is the pre-existing landed-branch backlog (Phase 3).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHjMkFUZJ1pK21oyv1ropN
@github-actions

Copy link
Copy Markdown

Multi-agent review roll call
@codex review

(CodeRabbit and Claude review automatically. Reviewers: post substantive findings only. Authors/agents: address every thread, push fixes to this branch, reply and resolve, then re-request review.)

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@4444J99
4444J99 enabled auto-merge July 30, 2026 18:32
@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request expands GitHub estate and repository governance configuration, updates denylisted namespaces and repository classifications, and refines owner and outside-collaborator handling in the GitHub census script.

Changes

GitHub governance and census

Layer / File(s) Summary
Estate policy foundation
institutio/github/estate.yaml
Shelf assignments now cover the defined shelf organizations, with new sauce, license, and public shelf policy sections.
Repository governance overrides
institutio/github/access.yaml, institutio/github/estate.yaml
Denylisted repository namespaces and numerous per-repository class, privacy, and publication judgments are updated.
GitHub census routing
scripts/gitvs.py
Owner filtering excludes any derived owner containing *; outside-collaborator queries use token or user authentication based on organization class.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

  • organvm/limen#1423: Directly overlaps with outside-collaborator census fetching and authentication behavior.
  • organvm/limen#1653: Modifies the same estate custody governance and repository override configuration.
  • organvm/limen#1670: Directly relates to GitHub census and owner-handling logic.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the main scope: shelf registry changes and Phase-4 policy updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/shelf-t2-t4-books

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@4444J99
4444J99 added this pull request to the merge queue Jul 30, 2026
Merged via the queue into main with commit d5d6ea4 Jul 30, 2026
13 of 14 checks passed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/gitvs.py`:
- Around line 1028-1033: Update the organization census flow around _gh_user and
_gh so failed or malformed rolls for declared shelf and canonical organizations
set ok = False, preventing out["complete"] from being true when organization
data is missing. Preserve the existing personal-account 404 exception, which
should remain non-fatal.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 550f11f5-0c75-4bc6-b097-8bee839d1f96

📥 Commits

Reviewing files that changed from the base of the PR and between b07fc12 and 8d23413.

📒 Files selected for processing (3)
  • institutio/github/access.yaml
  • institutio/github/estate.yaml
  • scripts/gitvs.py

Comment thread scripts/gitvs.py
Comment on lines +1028 to +1033
# Non-canonical org rolls (shelf orgs) sit outside the App installation — user-scoped.
org_args = ["api", f"/orgs/{org}/outside_collaborators?per_page=100", "--jq", "[.[].login] | sort"]
if _org_class(org, estate)[0] == "canonical":
r = _gh(org_args, token, timeout=30)
else:
r = _gh_user(org_args, timeout=30)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not report a complete census after a shelf-org roll fails.

When _gh_user fails for a declared shelf org, its roll becomes None but ok remains true, so out["complete"] can be true with missing organization data. Keep the personal-account 404 exception, but set ok = False for failed or malformed declared shelf/canonical-org rolls.

Proposed fix
     for org in owners(estate):
+        declared_org = (
+            org in (estate.get("shelf_assignments") or {}).get("shelves", {})
+            or _org_class(org, estate)[0] is not None
+        )
         org_args = ["api", f"/orgs/{org}/outside_collaborators?per_page=100", "--jq", "[.[].login] | sort"]
         if _org_class(org, estate)[0] == "canonical":
             r = _gh(org_args, token, timeout=30)
         else:
             r = _gh_user(org_args, timeout=30)
         try:
-            out["org_outside"][org] = json.loads(r.stdout or "[]") if r.returncode == 0 else None
+            out["org_outside"][org] = json.loads(r.stdout or "[]") if r.returncode == 0 else None
+            if r.returncode != 0 and declared_org:
+                ok = False
         except ValueError:
             out["org_outside"][org] = None
+            if declared_org:
+                ok = False

As per coding guidelines, “Do not claim completion until the relevant executable predicate exits successfully.”

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Non-canonical org rolls (shelf orgs) sit outside the App installation — user-scoped.
org_args = ["api", f"/orgs/{org}/outside_collaborators?per_page=100", "--jq", "[.[].login] | sort"]
if _org_class(org, estate)[0] == "canonical":
r = _gh(org_args, token, timeout=30)
else:
r = _gh_user(org_args, timeout=30)
for org in owners(estate):
declared_org = (
org in (estate.get("shelf_assignments") or {}).get("shelves", {})
or _org_class(org, estate)[0] is not None
)
# Non-canonical org rolls (shelf orgs) sit outside the App installation — user-scoped.
org_args = ["api", f"/orgs/{org}/outside_collaborators?per_page=100", "--jq", "[.[].login] | sort"]
if _org_class(org, estate)[0] == "canonical":
r = _gh(org_args, token, timeout=30)
else:
r = _gh_user(org_args, timeout=30)
try:
out["org_outside"][org] = json.loads(r.stdout or "[]") if r.returncode == 0 else None
if r.returncode != 0 and declared_org:
ok = False
except ValueError:
out["org_outside"][org] = None
if declared_org:
ok = False
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/gitvs.py` around lines 1028 - 1033, Update the organization census
flow around _gh_user and _gh so failed or malformed rolls for declared shelf and
canonical organizations set ok = False, preventing out["complete"] from being
true when organization data is missing. Preserve the existing personal-account
404 exception, which should remain non-fatal.

Source: Coding guidelines

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8d234131ad

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

# visibility and the split protocol are the only sauce levers.
sauce_policy:
provenance: "Phase 4 2026-07-30 — verdicts derive from class + moat-guard rows + split registrations (the never-a-second-list law)"
derivation: {private_classes: [vault_private, operation_private, private_unreviewed, conductor], guard_registry: moat-guard.json, split_predicate: scripts/check-split-hygiene.py}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Derive PRIVATE from effective visibility

When this derivation is applied, every conductor and operation_private repository is labeled PRIVATE solely by class. However, conductor explicitly declares visibility: public, and visibility_drift() treats operation_private rows with publish_candidate as desired-public; this commit includes several such rows. Public repositories such as organvm/limen and published candidates therefore receive the verdict documented as meaning census-private, creating a false moat posture. Derive PRIVATE from effective/observed visibility or account for these public exceptions.

Useful? React with 👍 / 👎.

Comment on lines +545 to +546
shelf_public: "no LICENSE by default — the published FORM, all rights reserved; a per-repo grant is a judgment-row fact"
portal_public: "permissive only where the README already claims it (a-i-chat--exporter ships MIT — grandfathered); new grants are per-repo judgment rows"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Provide a valid home for per-repo license judgments

When a repository needs the exception explicitly permitted here, there is nowhere to record it: repo_overrides is the only sanctioned per-repo judgment block, but VALID_OVERRIDE_KEYS rejects any license or grant field, and a repo-wide search finds no other registry or consumer for license_policy. Consequently a LICENSE can change without a declared judgment, while adding the required judgment makes parity fail, so this policy cannot be enforced. Add a validated per-repo license field or registry and an owning predicate.

AGENTS.md reference: AGENTS.md:L179-L182

Useful? React with 👍 / 👎.

Comment thread scripts/gitvs.py
timeout=30,
)
# Non-canonical org rolls (shelf orgs) sit outside the App installation — user-scoped.
org_args = ["api", f"/orgs/{org}/outside_collaborators?per_page=100", "--jq", "[.[].login] | sort"]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Compare shelf collaborators against per-repo grants

When a login already has one legitimate grant, this newly readable shelf-org roll cannot detect that login's undeclared access to a different shelf repository. Class N later builds one estate-wide declared_logins set and treats any occurrence in any org roll as declared, while its per-repo census only probes repositories already listed under grants or never_grant_repos. A partner granted on one 4444J99 project can therefore retain unnoticed access anywhere in a shelf org, violating the registry's exact-project partition; retain repository information and compare each live grant to its specific repo.

Useful? React with 👍 / 👎.

organvm/persona-fleet: {class: vault_private, why: "persona corpus — private data"}
organvm/personal: {class: vault_private, why: "personal memory store — private data"}
organvm/portfolio: {class: portal_public, why: "traction/value lure — portal tier"}
organvm-vii-kerygma/portfolio: {class: portal_public, why: "traction/value lure — portal tier"}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Rekey downstream registries after repository transfers

After this transfer, census rows use organvm-vii-kerygma/portfolio, but positioning-seeds.json and value-repos.json still key organvm/portfolio; this batch similarly moves cind-and-sol-foundation without updating its value-repo key. Consumers compare these names exactly (repo-metadata-sync.py checks repo in pos, while the SEO backlog and product ledger build exact sets), so the portfolio loses its curated metadata seed and appears unseeded while priority/product records remain attached to the obsolete owner. Rekey every owner-qualified registry/default during the transfer or normalize canonical aliases before comparison.

AGENTS.md reference: AGENTS.md:L294-L300

Useful? React with 👍 / 👎.

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.

1 participant