Skip to content

tools(landing): add horizon_land.sh, the local-first lander for the private horizon repository - #1194

Merged
seathatflowsinourveins merged 4 commits into
mainfrom
claude/api-actions-horizon-lander-20261015
Oct 16, 2026
Merged

seathatflowsinourveins merged 4 commits into
mainfrom
claude/api-actions-horizon-lander-20261015

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Scope

  • What this PR changes: adds tools/landing/horizon_land.sh, the command center's lander for the private seathatflowsinourveins/horizon repository, which has no hosted CI. It replaces the hosted validate check with local CI receipts, requires a Claude-family and a GPT-family verdict file naming the full head SHA, posts the three commit statuses the horizon ruleset requires, and records the landing as trailers in the squash commit (file names only) and in a local landing receipt (the digests). It is the required local workflow, as docs: record horizon, the private runtime-ecosystem repository with local-first enforcement #1195's Decision 4 (landed) records: GitHub enforces the three contexts and freshness, a writer can still post them and merge in the web interface (Known gaps), and the self-audit that would detect such a merge is a PROPOSAL. nas_land.sh, uet_land.sh, codex_gate.py and review_normalize.py do not change by a byte.
  • Base commit: 8053f14e7e0817d2502dff2bb284bfb7e1b0152f; git merge-tree --write-tree against main a93ba0b8c is clean.
  • Lane: lane:foundation.
  • Owned paths touched: tools/landing/horizon_land.sh (new), tools/landing/README.md, tests/test_landing_scripts.py, manifests/evidence.json (three rows refreshed, one added).
  • Authorization: the command center's ruling of 2026-10-15 (Option A: build the horizon mode as one pull request, with the normal reads), and its addenda 08 and 10 to the 19:12Z direction (the ruleset backstop; R1, full-lifecycle automation with a receipt at each step). Private records are cited by name only.

SOTA sources

  • The existing lander, reused unchanged: tools/landing/nas_land.sh at 8053f14e7, lines 124-342, the block shared with uet_land.sh (lines 43-270 apart from lg_ci_state). horizon_land.sh carries it byte for byte (cmp); the test's shared-block check is now three-way. The verdict grammar it narrows is nas's (nas_land.sh:174-176, :197), the GATES_DONE rule is nas's correction Split the OSV SARIF upload into a tool-free job; fix the blind comparison's confirmed defects and file its evidence #121 (nas_land.sh:452, :461-466), and the receipt check reuses the shared block's lg_receipt_ok.
  • GitHub REST, at github/rest-api-description@58b1e0c0: commit statuses POST /repos/{owner}/{repo}/statuses/{sha} (descriptions/api.github.com/api.github.com.json:79201-79208: description is "A short description of the status." with no maxLength; context is case-insensitive); GET /repos/{owner}/{repo}/codeowners/errors with ref (:53272-53329). The combined status is read on every page, as tcc_read_gate does (nas_land.sh:365-372).
  • The merge pin: gh pr merge --match-head-commit, as cited in tools/landing/README.md for cli v2.102.0 (pkg/cmd/pr/merge/merge.go).
  • Trailers: git 2.53.0, git interpret-trailers --parse ([email protected] Documentation/git-interpret-trailers.adoc); a test parses the logged squash body with it.
  • The EXIT trap: the installed bash 5.3 (Ubuntu bash 5.3-2ubuntu1) bash(1), exit: "Any trap on EXIT is executed before the shell terminates"; measured on bash 5.3.9: the trap keeps the exit status, does not run in a $(...) subshell, and runs on SIGTERM (rc 143).
  • Identity model: the review-verdict App record, Interim: a status is advisory and the lander re-reads its own records. horizon's required contexts move to the App's check runs after that record's Transition.
  • The repository it lands: horizon's ruleset (id 25195996) requires lander/local-ci, lander/verdict-claude and lander/verdict-gpt with the strict up-to-date policy; GitHub's rule refused a direct push to main on 2026-10-15T20:40:27Z (GH013).

What the lander does, in order

  1. Arguments and inputs before any call (exit 2): HORIZON_CLAUDE_VERDICT, HORIZON_GPT_VERDICT, optional HORIZON_MUSE_VERDICT (TRIAL: recorded, never gates), LOCAL_CI_RECEIPTS; it refuses the nas- and uet-only inputs when set.
  2. Its own lock (horizon.lock, exit 14), fetch, and the read head (exit 3; no head-following).
  3. The PR must target main (baseRefName, read with the head; CODEOWNERS comes from the base, github/docs@be38ec5d about-code-owners.md:44, and gh pr merge --match-head-commit binds the head, not the base, cli/[email protected] pkg/cmd/pr/merge/http.go:47-50); strict: main from git ls-remote must be an ancestor of the head and the merge state not BEHIND or DIRTY (exit 13 for either). It never calls gh pr update-branch, because a server-side update makes a head no verdict names.
  4. Local checks: each verdict's last Verdict: line names the FULL head (an 8-hex prefix alone is refused) and its Family: line matches its slot; the two required files differ; a stated landing gate needs GATES_DONE naming the full head; receipts in the CI: exit <rc> at <40-hex>: <command> grammar, with sh tests/hooks_test.sh required and every command's last line at this head exit 0 (exit 5); CODEOWNERS read from main, with GitHub's codeowners/errors empty and every rule naming only the merging account (exit 8).
  5. Only then: ready, and the three statuses POSTed at the head, each describing its files by name (exit 15 if one fails). From the first POST an EXIT trap posts failure for every context unless the merge succeeded; the revocation ignores further HUP, INT and TERM.
  6. The final gate, right before the merge: head and base, the local digests of the verdict, receipt and gate files unchanged (exit 7), the three statuses success with the lander's exact descriptions and no other lander/ context (exit 5), CODEOWNERS, ancestry (exit 13), merge state.
  7. The squash merge pinned with --match-head-commit, its body ending in trailers that name files only: Lander-head, Lander-local-ci, Lander-verdict-claude, Lander-verdict-gpt, Lander-verdict-muse (when set), Lander-gates-done (when a gate is stated), and Lander-codeowners with the sha256 of main's own CODEOWNERS. The digests of the private files go to a local receipt, $LANDING_COORD/horizon-landings/<pr>-<head12>.json (0400), after the merge (exit 16 if that write fails; exit 12 if the merge commit cannot be read). The PROPOSAL self-audit would bind main's trailers to that receipt.

Evidence-class table

Claim Evidence class Command / receipt
The lander's rules hold on canned GitHub data local_integration python3 -m unittest tests.test_landing_scripts: 210 tests OK (1 skipped); 176 at the base
Each rule is load-bearing local_integration with the script absent 7 classes error; 18 single-rule mutants (full head, EXIT trap, CODEOWNERS at head, final-gate statuses, required receipt command, ancestry, digest compare, refused inputs, codeowners errors, same bytes, description, case, foreign owner, ready order, merge mark, 8-hex GATES_DONE, final-gate GATES_DONE, Muse gate) each fail at least one test; the 3 GATES_DONE tests fail 16 subtests against the pre-amend script
nas and uet are unchanged local_integration git diff --quiet 8053f14e7 HEAD -- tools/landing/nas_land.sh tools/landing/uet_land.sh tools/landing/codex_gate.py tools/landing/review_normalize.py; shared block cmp-identical
No local-pages grant is needed local_integration 32 tests/test_local_pages* modules: 547 tests OK
Registry and push gates local_integration scripts/validate.py exit 0; scripts/evidence_manifest.py --check exit 0; git diff --check exit 0; bash -n exit 0; tests.test_pre_push_gate after the commit: 29 OK
The lander lands a real horizon PR not yet observed the first horizon landing (its stale-text correction PR) is the native trial

README digest row: horizon_land.sh 7ba9a06aacbff4e50111266891ac9d2f7ae8c305824a65f4181045fa04f22ee2 (772 lines); at b4489b15 it was 133dab4cfd8da99a695753c9aea2e40f9f1c582bda6d2ee158cbb39c8d96a9a2 (749 lines), at 34add438 3320c5ab0a312307fa47487a8d154f3fb138b32db41d1bcf1f54bf25f8582ce3 (659 lines).

Local commands run

python3 -m unittest tests.test_landing_scripts                      exit 0; Ran 210 tests; OK (skipped=1)
python3 -m unittest $(ls tests/test_local_pages*.py | ...)           exit 0; Ran 547 tests; OK
python3 scripts/validate.py                                          exit 0; 71 components / 12140 hashed files / 240 receipts
python3 scripts/evidence_manifest.py --check                         exit 0; 12140 files
git diff --check 8053f14e7 HEAD; bash -n tools/landing/horizon_land.sh   exit 0
python3 -m unittest tests.test_pre_push_gate   (after the commit)    exit 0; Ran 29 tests; OK
shellcheck                                                           not installed; not run

R1 (full-lifecycle automation) in this PR

  • Land: this lander, with its receipt in the squash commit.
  • Reads: both families' verdict files are inputs bound to the full head.
  • Post-merge audit: the PROPOSAL self-audit (docs: record horizon, the private runtime-ecosystem repository with local-first enforcement #1195's Decision 4) would read main's trailers and the local landing receipt; it is not built, here or in horizon.
  • Plan and PR steps: carried by the access manifest and the decision record (separate pull requests, per the CC's order).

Known gaps

  • The web-UI residual. GitHub checks only that the three contexts report success at the head, and any person or integration with write access can set a status (github/docs@be38ec5d available-rules-for-rulesets.md:178); a writer can post three successes and merge in the web interface without these local checks. Statuses carry no App identity (the App record's Interim). Detection is the PROPOSAL self-audit.
  • Revocation can fail on an ordinary exit, for example when the failure POSTs themselves fail; the successes then stay and are revoked by hand (README, manual revocation).
  • The final reads are not atomic with the merge; --match-head-commit pins only the head.
  • The private digests live only in the host's LANDING_COORD; after a host loss the trailers bind only names and the head.
  • The clone path must contain no whitespace.
  • Receipts are claims; the lander re-runs no test.
  • A SIGKILL or host loss between the first POST and the merge leaves successes standing; they need revoking by hand.
  • The live description limit and codeowners/errors have not been exercised against GitHub (no POST was made); the lander caps descriptions at 140 characters and compares them exactly at the final gate.
  • An UNSTABLE merge state is refused, and the merge-state poll gives up after two minutes.
  • The squash body is bounded by one argument's length limit.

Review rounds

  • Round 1 at 34add438: the command center's full read (PASS, with two P2 and three P3; MICRO-full-34add438.md, by name) and the GPT full read (CHANGES_REQUESTED: one P1, one P2, four P3; GPT-VERDICT-34add4382.md, by name). Fold 1, b4489b15, answered all of them in one commit:

    • GPT P1: statuses and trailers published digests of unpublished verdict and receipt files; they now carry file names only, the digests stay local for the final gate and go to the local landing receipt. Regression: a landing whose every input holds a synthetic home path publishes no digest or 7-hex prefix of them;
    • GPT P2: the base is bound (baseRefName == main before ready and at the final gate, exit 13); a late retarget after the posts refuses and posts the failures; a main-based control lands;
    • GPT P3s: the head must end at a word boundary (A, G, 0, _ after it refused); the post-merge read is checked and prints only the typed id (exit 12); public commit IDs registered for the body guard; the gaps above;
    • CC P2s: the enforcement design is a PROPOSAL pointing to docs: record horizon, the private runtime-ecosystem repository with local-first enforcement #1195, with the residual stated; strict freshness and status checks cited at available-rules-for-rulesets.md:172-178, :188-193, and what those lines do not say is labelled PROPOSAL;
    • CC P3s: the merge-state lag is labelled as measured on us-equities-trading SOTA repository convergence 2026-09-22: per-layer list, manifest, newcomer dispositions, engine reconciliation #58, not documented by GitHub; UNSTABLE cited at github/docs@be38ec5d src/graphql/data/fpt/schema.docs.graphql:26511-26554; trap '' HUP INT TERM opens the revocation (a second TERM during it still posts all three failures).
    • Fail-first: the 9 new tests fail 34 times against 34add438; 8 more single-rule mutants each fail at least one test.
  • Round 2 at b4489b15: the command center's delta read (PASS with micro items; MICRO-delta-b4489b15.md, by name), the GPT delta read (ACK with four P3s; GPT-VERDICT-b4489b15b.md, by name) and the local review (three P2s). The fold commit (this PR's head) answers them in one commit:

    • wording matches docs: record horizon, the private runtime-ecosystem repository with local-first enforcement #1195's Decision 4: "the required local workflow", and "the PROPOSAL self-audit", never "planned";
    • the merge is finalised whole: HUP, INT and TERM are ignored from just before the merge call until the landing receipt is written and reported, so a signal neither revokes a merged head's statuses nor loses the receipt (CC P3-3, local review P2-2); when exits 12 and 16 both apply, 12 is the exit;
    • CODEOWNERS fails closed: a lookup or read that fails is exit 8 (local review P2-1);
    • a leading, trailing or doubled : in LOCAL_CI_RECEIPTS is exit 2 before any call (local review P2-3);
    • the uet#58 lag wording, and the noclobber and trap '' texts cited to the installed bash 5.3 bash(1) (CC P3-1, P3-2); comments no longer describe a posted digest (GPT P3-4);
    • fail-first: the four new tests fail 7 times against b4489b15.
  • Round 3 at 4fad2736: the command center stopped the auto-land on the local review's P2 (a failed merge call revoked without checking whether GitHub had merged), and the GPT micro read was an ACK with five P3s (GPT-VERDICT-4fad2736c.md, by name). The fold commit (this PR's head):

    • reconciles a failed merge call before anything is revoked: the state is read three times, two seconds apart; MERGED at the head continues as a landing with its receipt; OPEN or CLOSED there on all three is exit 7 and revokes; anything else is the new exit 17, with the statuses kept and nothing revoked. Fail-first: the new test fails against 4fad2736;
    • GPT P3-4: the empty-field and pipefail comments cite the installed bash 5.3 bash(1) (EXPANSION, Word Splitting; SHELL GRAMMAR, Pipelines), and pipefail is described as the rightmost non-zero status;
    • GPT P3-5: this body's current-state sentences now match the script, the README and docs: record horizon, the private runtime-ecosystem repository with local-first enforcement #1195;
    • GPT P3-1, P3-2 and P3-3 stay Follow-ups (below).

Follow-ups

  • GPT delta P3-1: the shared block's author check accepts an unvalidated merge-commit reply. The block stays byte-identical to nas_land.sh, so the fix belongs to all three landers in one change.
  • GPT delta P3-2: a local symlink swapped in after the receipt-location check could still let the receipt write report success.
  • GPT delta P3-3 (and round 3's P3-3): the recovery-limit wording and the documentation corrections have no focused documentation assertion with a fail-first run.

Decision record

The horizon repository record (docs/decisions/2026-10-15-horizon-runtime-ecosystem-repository.md) follows as its own pull request, after this one, per the CC's order.

Checklist

  • No workflow change.
  • No secrets are printed, logged or committed; the lander prints no text that gh or its API returned.
  • No new paid hosting, subscription or billing surface.
  • Peer-owned files and worktrees preserved.

🤖 Generated with Claude Code

…rivate horizon repository

horizon_land.sh lands pull requests of seathatflowsinourveins/horizon, which has no hosted CI,
no scripts/validate.py, no evidence manifest and no Codex connector. Its main ruleset requires
the commit statuses lander/local-ci, lander/verdict-claude and lander/verdict-gpt (strict), so
the lander is the only merge path: it checks the local evidence, posts the three statuses at the
exact head and squash-merges pinned with --match-head-commit.

Checks, in order: the arguments and inputs (HORIZON_CLAUDE_VERDICT, HORIZON_GPT_VERDICT,
HORIZON_MUSE_VERDICT as a TRIAL, LOCAL_CI_RECEIPTS), with the other landers' inputs refused
before any call; its own horizon.lock; the pull request's head must equal the read head (no
head-following); origin/main must be an ancestor of the head and GitHub must report neither
BEHIND nor DIRTY (the branch is never updated here); the verdicts (nas_land.sh's acceptance plus
a last Gate/Verdict line naming the full 40-hex head, the right Family line, two different
files); the receipts (CI: exit <code> at <head>: <command>, the last line per command counts,
sh tests/hooks_test.sh required, every command exit 0); main's CODEOWNERS owned by the merging
account alone, and GitHub's codeowners/errors at that main reporting none; then a draft is
marked ready, after the local refusals.

Correction #121 is carried as nas_land.sh carries it (the CC's ruling of 2026-10-15): a verdict
of any family whose text states a landing gate (nas's four phrases, any letter case) needs
GATES_DONE, a receipt that names the full 40-hex head (the shared block's lg_receipt_ok given the
full head, so the 8-digit prefix alone is refused), or exit 2 before any change on GitHub; it is
read again at the final gate (exit 7 when its bytes changed) and recorded as Lander-gates-done.

Statuses: each success carries "<file name> sha256 <digest>" (local-ci: one digest over the
receipt files). An EXIT trap, with HUP, INT and TERM trapped, posts failure for all three unless
the merge succeeded. The merge state is polled until CLEAN. The squash body ends in a trailer
paragraph (Lander-head, Lander-local-ci with one Lander-local-ci-receipt line per file,
Lander-verdict-claude, Lander-verdict-gpt, Lander-verdict-muse when set, Lander-gates-done when
a verdict states a landing gate, Lander-codeowners). final_gate re-reads the head, the verdicts,
GATES_DONE and the receipts and their digests, the combined status
(exact descriptions, contexts compared case-insensitively), CODEOWNERS, origin/main and the
merge state, with nothing but the merge after it.

Exit codes: 2 inputs, verdicts or a stated landing gate without GATES_DONE, 3 head moved, 5
receipts or statuses, 6 merge state not settled, 7 ready, body or merge failed, or a verdict,
receipt or GATES_DONE changed after its post, 8 BLOCKED or
CODEOWNERS, 11, 12 and 14 as in the other landers, 13 not up to date or main unreadable or
moved, 15 (new) a status POST failed, 129, 130 and 143 a signal.

The shared land-gate-fns block is nas_land.sh's byte for byte (now a three-way test);
nas_land.sh and uet_land.sh are unchanged. Tests: HorizonEndToEndTests with its own scratch
repository, the fake gh's status POST and codeowners/errors branches, and horizon joining the
existing script-text checks. README, its digest row and the manifest rows updated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 15, 2026
…g, PROPOSAL labels

The GPT read (CHANGES_REQUESTED at 34add43) and the CC's read (PASS with items), each finding
and its fix:

- GPT P1, private digests published: the statuses and the trailers named each private file's
  sha256. Now the three descriptions are file names (local-ci: the receipt names, one space
  apart) and every Lander-* trailer names files only; CODEOWNERS keeps its sha256, its preimage
  being main's own file. The digests stay local: compared at the final gate and kept in a
  landing receipt, $LANDING_COORD/horizon-landings/<pr>-<head12>.json, written once after the
  merge with mode 0400 (exclusive create; its place checked before ready and the posts, exit 7;
  a failed write after the merge, new exit 16).
- GPT P2, base not bound: the head and baseRefName are read together; the base must be main
  before ready and the posts and again at the final gate (exit 13, the name withheld). Cites
  github/docs about-code-owners.md:44 and cli v2.102.0 pkg/cmd/pr/merge/http.go:47-50, :77-80.
- GPT P3, terminator: the full head must be a whole word (no letter, digit or _ after it), in a
  verdict and in GATES_DONE; head+A is refused.
- GPT P3, post-merge report: the merge commit is read with its exit checked and printed in its
  typed shape only; a failed read is exit 12 (the receipt then records no merge commit).
- GPT P3, body guard: #1194's base, main at the first reads and its first head registered in
  PUBLIC_COMMITS with their URLs (each read on GitHub), and the first head's horizon_land.sh
  digest in PUBLIC_DIGESTS.
- CC P2, "the only merge path": labelled PROPOSAL, pointing to #1195's decision record, with the
  residual stated: GitHub checks only the contexts' states and anyone with write access can set
  one (available-rules-for-rulesets.md:176, :178), so a web-UI merge after the posts is not
  refused.
- CC P2, ruleset mechanics: strict cited at available-rules-for-rulesets.md:188-193 and the
  checks at :172-178; what those lines do not say is labelled PROPOSAL.
- CC P3, the merge-state lag: "measured on us-equities-trading #58, not documented by GitHub".
- CC P3, UNSTABLE: MergeStateStatus cited at schema.docs.graphql:26511-26554 (:26551-26553).
- CC P3, a second signal during revocation: trap '' HUP INT TERM is hz_revoke's first statement.

Tests, each failing at 34add43 (9 tests, 34 failures) and against single-rule mutants: no
digest or 7-digit prefix of a private file in a description or the body, the receipt keeping
them; the receipt's place and its write; a base other than main, at the start and as a late
retarget flip; head+A, G, 0 or _; the post-merge read with a stdout sentinel; a TERM during the
first revocation POST. The shared block stays nas_land.sh's byte for byte; nas_land.sh and
uet_land.sh are unchanged. README, its digest row and the manifest rows refreshed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Oct 16, 2026
…nned plan facts

Both families' reads at a110f88 (the command center's full read and the GPT full read,
both CHANGES_REQUESTED), folded in one commit, worded as #1194's fold:
- P1 (both): "the only merge path" and "GitHub refuses only a merge that skipped them" are
  replaced by the lander as the required local workflow. GitHub enforces the three
  lander/* contexts and freshness (github/docs@be38ec5d available-rules-for-rulesets.md
  :172, :188-193); any writer can set a status (:178), so a web-UI merge after three
  posted successes is a stated residual. The self-audit stays a PROPOSAL.
- Implemented, manual and pending steps are separated: the ruleset and the root commit's
  hooks and permission rules are implemented; the lander is PENDING (#1194), with base ==
  main and CODEOWNERS from the base (about-code-owners.md:44); the plan step's SOTA-sources
  section is manual (horizon has no check; routed to R5 of addendum-10).
- Trailers carry file names, never a digest of an unpublished file (#1194's GPT P1).
- The transfer, ruleset and plan facts name their reads and times; the plan availability
  rows cite github/docs@be38ec5d gated-features reusables.
- north-star-research: no re-target; S8's record stands, and its GitHub description was
  corrected to it on 2026-10-15.
- The App extension to horizon is a PROPOSAL with its prerequisites; the transfer-back
  overturn now needs the destination plan first; a recovery order is stated.
- Provenance adds addendum-10 and the correction ROW, by name.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…afe merge finalisation, fail-closed CODEOWNERS and receipt lists

The command center's delta read at b4489b1 (PASS with micro items), the GPT delta read
(ACK with four P3s) and the local review (three P2s), in one commit:
- Wording matches #1195's Decision 4: the lander is "the required local workflow" (GitHub
  enforces three contexts and freshness; the web-UI residual), and the self-audit is "the
  PROPOSAL self-audit", never "planned" (CC P2-1).
- The merge is finalised whole: HUP, INT and TERM are ignored from just before the merge
  call until the landing receipt is written and the merge reported, so a signal neither
  revokes a merged head's statuses nor loses the receipt (CC P3-3, local review P2-2);
  when exits 12 and 16 both apply, 12 is the exit (documented and tested).
- CODEOWNERS fails closed: a git ls-tree or read that fails is exit 8, and the next
  location is tried only after a successful lookup with no entry (local review P2-1).
- LOCAL_CI_RECEIPTS with a leading, trailing or doubled ':' is exit 2 before any call;
  read -a dropped a trailing empty field (local review P2-3).
- uet#58's lag is worded as measured there, not documented by GitHub (CC P3-1); the
  noclobber and trap '' texts cite the installed bash 5.3 bash(1) (CC P3-2).
- Comments no longer describe a posted digest (GPT P3-4).
- The README digest row and the published-digest list follow the new script bytes;
  b4489b1's script digest is registered with its URL.

Fail-first: the four new tests fail 7 times against b4489b1. Follow-ups, not taken here:
GPT P3-1 (the shared author check, in the block that stays byte-identical to nas), P3-2
(a late local symlink swap after the receipt check) and P3-3 (a documentation assertion
for the recovery limits).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Oct 16, 2026
…ocal-first enforcement (#1195)

* docs: record horizon, the private runtime-ecosystem repository with local-first enforcement

The owner's decisions of 2026-10-15 (paraphrased) and the command center's rulings: a private
repository seathatflowsinourveins/horizon for the NativeHorizonNY runtime ecosystem as code,
its location on the Pro personal account (measured plan facts), the lander as the only merge
path with a ruleset backstop, the interim status identity per the review-verdict App record,
and the repository audit's deltas to the 2026-10-10 consolidation.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Fold the #1195 reviews: the lander as the required local workflow, pinned plan facts

Both families' reads at a110f88 (the command center's full read and the GPT full read,
both CHANGES_REQUESTED), folded in one commit, worded as #1194's fold:
- P1 (both): "the only merge path" and "GitHub refuses only a merge that skipped them" are
  replaced by the lander as the required local workflow. GitHub enforces the three
  lander/* contexts and freshness (github/docs@be38ec5d available-rules-for-rulesets.md
  :172, :188-193); any writer can set a status (:178), so a web-UI merge after three
  posted successes is a stated residual. The self-audit stays a PROPOSAL.
- Implemented, manual and pending steps are separated: the ruleset and the root commit's
  hooks and permission rules are implemented; the lander is PENDING (#1194), with base ==
  main and CODEOWNERS from the base (about-code-owners.md:44); the plan step's SOTA-sources
  section is manual (horizon has no check; routed to R5 of addendum-10).
- Trailers carry file names, never a digest of an unpublished file (#1194's GPT P1).
- The transfer, ruleset and plan facts name their reads and times; the plan availability
  rows cite github/docs@be38ec5d gated-features reusables.
- north-star-research: no re-target; S8's record stands, and its GitHub description was
  corrected to it on 2026-10-15.
- The App extension to horizon is a PROPOSAL with its prerequisites; the transfer-back
  overturn now needs the destination plan first; a recovery order is stated.
- Provenance adds addendum-10 and the correction ROW, by name.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
…ipt split and pipefail

The command center stopped the auto-land at 4fad273 on the local review's P2, and the
GPT micro read there was an ACK with five P3s; one commit:
- A failed merge call is reconciled before anything is revoked (local review P2): GitHub
  can commit the merge and the reply be lost, so the state is read three times, two
  seconds apart. MERGED at the read head continues as a landing (HZ_MERGED, the receipt,
  the report); OPEN or CLOSED there on all three reads is exit 7 and the EXIT trap
  revokes; anything else is the new exit 17: the outcome is unknown, the statuses are kept
  (HZ_KEEP), nothing is revoked, and the pull request is checked by hand. README exit
  codes and step list updated; the old merge-failure test now serves an OPEN pull
  request. Fail-first: the new test fails against 4fad273.
- GPT P3-4: the empty-field comment cites bash(1) EXPANSION, Word Splitting ("field
  terminators"; adjacent delimiters "produce a null field"), and the pipefail comment
  quotes SHELL GRAMMAR, Pipelines (the rightmost non-zero status), both from the
  installed bash 5.3 (5.3-2ubuntu1).
- GPT P3-5 is the PR body's wording (aligned there); P3-1, P3-2 and P3-3 stay Follow-ups.
- The README digest row and the published-digest list follow the new bytes; 4fad273 and
  its script digest are registered with their URLs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as ready for review October 16, 2026 05:21
@seathatflowsinourveins
seathatflowsinourveins merged commit 65d66a3 into main Oct 16, 2026
34 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/api-actions-horizon-lander-20261015 branch October 16, 2026 05:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant