Target railiance01 explicitly for founder inventory execution
Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a1abf1-7e95-7141-87c9-ee78332bf790
This commit is contained in:
parent
d2eefb371d
commit
502f8208e4
4 changed files with 107 additions and 3 deletions
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"schema": "railiance.vergabe-pilot-native-inventory.v1",
|
||||
"observed_at": "2026-11-05T22:05:14.439011+00:00",
|
||||
"evidence_kind": "user_reported_terminal_output",
|
||||
"workplan": "RAPPS-WP-0014",
|
||||
"task": "RAPPS-WP-0014-T03",
|
||||
"runtime_mutations": false,
|
||||
"native_inventory_complete": false,
|
||||
"cluster_read": "unavailable_or_invalid_response",
|
||||
"execution_host": "not_reported",
|
||||
"cluster_identity_or_outage_established": false,
|
||||
"followup": "Use the reviewed workstation transport to connect explicitly to railiance01; return the remote inventory JSON."
|
||||
}
|
||||
|
|
@ -43,8 +43,26 @@ path was unavailable in the invoking terminal; its host was not reported.
|
|||
The founder does not need an executor installation to perform their own
|
||||
reviewed read-only check.
|
||||
|
||||
From a synced `railiance-apps` checkout in the founder's own terminal on
|
||||
**railiance01**, run:
|
||||
The subsequent direct invocation returned `cluster_read:
|
||||
unavailable_or_invalid_response`, without establishing a cluster identity. Its
|
||||
execution host is unconfirmed. Use the explicit remote transport to avoid
|
||||
depending on the workstation's root PATH or kubeconfig.
|
||||
|
||||
From the **workstation** `railiance-apps` checkout in the founder's own
|
||||
interactive terminal, run:
|
||||
|
||||
```bash
|
||||
git pull --ff-only
|
||||
python3 tools/vergabe_pilot_inventory_remote.py --run
|
||||
```
|
||||
|
||||
The transport validates the unchanged inventory source SHA256, connects through
|
||||
the existing `ssh railiance01` login with a TTY and runs the pinned source with
|
||||
the node's existing sudo/kubeconfig context. Source travels as one shell-quoted
|
||||
argument, preserving stdin for the sudo prompt. There is no remote checkout or
|
||||
local root Kubernetes context requirement. Default mode omits SSH execution.
|
||||
|
||||
When already in a synced checkout **on railiance01**, the equivalent command is:
|
||||
|
||||
```bash
|
||||
sudo env KUBECONFIG=/etc/rancher/k3s/k3s.yaml /usr/bin/python3 tools/vergabe_pilot_inventory.py
|
||||
|
|
|
|||
59
tools/vergabe_pilot_inventory_remote.py
Normal file
59
tools/vergabe_pilot_inventory_remote.py
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Run the pinned read-only inventory through the founder's existing SSH login.
|
||||
|
||||
Run from the workstation checkout in the founder's own interactive terminal.
|
||||
Default only reviews the transport. --run connects to railiance01 explicitly;
|
||||
SSH and sudo authenticate in that terminal. No administrative credential leaves
|
||||
the node. The public source travels as a quoted argument, preserving stdin for
|
||||
the sudo prompt and avoiding a remote checkout requirement.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
SOURCE_SHA256 = "b610059b5d7398138062de51edab3555b973cfbb61f02fa684184852805d7507"
|
||||
SOURCE = Path(__file__).with_name("vergabe_pilot_inventory.py")
|
||||
|
||||
|
||||
def remote_command(source):
|
||||
if hashlib.sha256(source.encode()).hexdigest() != SOURCE_SHA256:
|
||||
raise ValueError("inventory_source_pin_mismatch")
|
||||
operation = [
|
||||
"sudo", "/usr/bin/env", "KUBECONFIG=/etc/rancher/k3s/k3s.yaml",
|
||||
"/usr/bin/python3", "-c", source,
|
||||
]
|
||||
return ["ssh", "-t", "railiance01", shlex.join(operation)]
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--run", action="store_true")
|
||||
args = parser.parse_args(argv)
|
||||
command = remote_command(SOURCE.read_text())
|
||||
if not args.run:
|
||||
print(json.dumps({"status": "prepared", "ssh_target": "railiance01",
|
||||
"inventory_source_sha256": SOURCE_SHA256,
|
||||
"runtime_mutations": False}))
|
||||
return 0
|
||||
if not sys.stdin.isatty():
|
||||
raise ValueError("founder_interactive_terminal_required")
|
||||
return subprocess.run(command, check=False).returncode
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
raise SystemExit(main())
|
||||
except ValueError as error:
|
||||
reason = str(error)
|
||||
if reason not in {"inventory_source_pin_mismatch", "founder_interactive_terminal_required"}:
|
||||
reason = "invalid_transport_input"
|
||||
print(json.dumps({"status": "launcher_failed", "failure": reason}))
|
||||
raise SystemExit(1)
|
||||
except OSError:
|
||||
print(json.dumps({"status": "launcher_failed", "failure": "source_or_ssh_unavailable"}))
|
||||
raise SystemExit(1)
|
||||
|
|
@ -196,7 +196,7 @@ id: RAPPS-WP-0014-T03
|
|||
status: wait
|
||||
needs_human: true
|
||||
decision_id: d06307e5-2737-461a-a2f4-a12c3b492a9a
|
||||
intervention_note: "Two-account functional walkthrough through Zuschlag/Nachlese is user-confirmed with UI follow-up. Next: founder runs the reviewed read-only inventory on railiance01 using the existing supervisor-execution lane. Gexec launcher stopped before submission because its binary was missing in the invoking terminal; host is unconfirmed. Agent privileges stay unchanged. Populated restart/off-host recovery, isolated restore, rollback, access evidence and ownership remain open."
|
||||
intervention_note: "Functional walkthrough is confirmed with UI follow-up. Latest founder inventory returned cluster_read unavailable_or_invalid_response; invoking host is unconfirmed, so no cluster fault is inferred. Next: run tools/vergabe_pilot_inventory_remote.py --run from the founder workstation terminal to target railiance01 explicitly. Agent privileges stay unchanged. Native inventory, populated recovery/access/rollback and ownership remain open."
|
||||
priority: high
|
||||
assignee: the-custodian
|
||||
blocking_reason: "Two-account functional walkthrough is confirmed with UI follow-up. Await attended native inventory, populated restart, coherent PostgreSQL/media/issue-state off-host recovery, isolated restored workflow, rollback/access evidence and operating ownership. September 25 proves database-only restore and restart."
|
||||
|
|
@ -356,6 +356,20 @@ The unnecessary custom founder launcher is retired from current source; its
|
|||
earlier preparation and failed attempt remain historical evidence. The pinned
|
||||
inventory helper and original agent gexec action remain unchanged.
|
||||
|
||||
2026-11-05 direct inventory return: user-reported JSON at 22:05:14Z has
|
||||
`native_inventory_complete: false` and `cluster_read:
|
||||
unavailable_or_invalid_response`. Host identity is unconfirmed; this establishes
|
||||
neither a valid node inventory nor a cluster outage. Receipt:
|
||||
`docs/evidence/2026-11-05-vergabe-founder-inventory-attempt.json`.
|
||||
|
||||
Prepared `tools/vergabe_pilot_inventory_remote.py` for the founder's workstation
|
||||
terminal. It verifies the unchanged inventory source pin and connects explicitly
|
||||
through SSH to railiance01, running that source as a quoted argument under the
|
||||
node's existing sudo context. Stdin remains available for normal authentication;
|
||||
no remote checkout, local admin kubeconfig or agent privilege grant is needed.
|
||||
Default mode only reviews transport. The agent did not execute the founder's
|
||||
SSH/sudo path. Native inventory and all operational recovery evidence remain open.
|
||||
|
||||
|
||||
## Validate synthetic sizing against the exact release and shared contention
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue