Files
ARCADIA-Studio/harness/release-publication-path-ytr83r-20260911.md
T

95 lines
5.6 KiB
Markdown

# Gitea publication path — 2026-09-11
Codex-ytr83r /root/integration_audit. Root assigned credential-safe read-only
authentication/access probes and a task-local publication helper. Owner authorization
is [issue #1 comment 178](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1#issuecomment-178):
reuse existing MCP credentials programmatically for Git HTTP and Gitea REST,
without printing or committing them. No Git push, tag creation, release creation,
artifact upload, credential/configuration change or global Git change occurred.
## Verified access
- Existing configuration: `C:/Users/User/.codex/config.toml`,
`mcp_servers.gitea.env.GITEA_ACCESS_TOKEN`. It contains a quoted token value;
the token was read in-process, not printed, copied to a file or included in
command arguments. The helper also supports the same process environment
variable if the configured value is absent.
- Authenticated `GET /api/v1/user`: **HTTP 200**, login **Codex-ytr83r**.
- Authenticated repository GET returns exact repository
`sorokin.oleg.edu/ARCADIA-Studio`, with server-reported permissions
`admin=false`, `push=true`, `pull=true`.
- `git ls-remote --heads --tags` against the exact configured Gitea repository
succeeded with 22 refs. This is a successful Git read probe; it does not by
itself prove write permission because this repository is publicly readable.
- Helper `probe` completed with exit 0. Actual push and release attachment
permissions remain **unexercised**; the server-reported push flag is evidence
of intended authorization, not a performed write.
- Instance OpenAPI readback identifies Gitea **1.27.3** and confirms
`/repos/{owner}/{repo}/releases/{id}/assets` GET/POST, optional `name` query,
`attachment` file form field, multipart/octet-stream request support and 201
success (400/404/413 documented). This verifies the advertised route contract,
not upload permission or the actual artifact-size limit. The first PowerShell
Swagger reader stalled; a bounded Python read succeeded and the task-owned
stalled reader was stopped without affecting other processes.
## Prepared local helper
File: `.local/publication-ytr83r/gitea_publication.py` (Git-ignored, contains no
credential value). Python 3.14 runtime already available at
`.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/python/bin/python.exe`.
Python syntax check passes. Frozen helper SHA256:
`0917FFF100981071D94380847E209874DD87F08744CF02170E0C7E54ACA98FFA`.
The helper is restricted to `http://217.177.34.108:3000` and this repository.
REST credentials use request headers held in memory; redirects are refused.
Git receives its repository-scoped Basic authorization header through only the
child process's `GIT_CONFIG_*` environment. The token and encoded credentials
never enter command arguments. Child Git tracing, prompts, credential helpers
and redirects are disabled; global/system Git configuration is bypassed for that
child without modifying either. Captured errors are sanitized before output.
Supported commands, run from repository root:
```powershell
$publicationPython = '.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/python/bin/python.exe'
$publicationHelper = '.local/publication-ytr83r/gitea_publication.py'
& $publicationPython -I $publicationHelper probe
# Later, release owner supplies explicit already-created local refs:
& $publicationPython -I $publicationHelper push <refs/heads/codex/BRANCH> <refs/tags/TAG>
# After a distinct draft/prerelease exists, owner supplies its ID and frozen file:
& $publicationPython -I $publicationHelper upload --release-id <ID> --file <ABSOLUTE_ARTIFACT_PATH>
```
The push command accepts explicit existing `refs/heads/codex/...` and tag refs;
it neither creates local refs nor force-pushes or deletes remote refs. Destination
ref equals source ref. Before invoking it, root selects the intended coherent
commit and coordinates release ownership. Relevant GitLab publication is separate;
this Gitea token is never sent to GitLab.
Upload uses streamed multipart `attachment` content at
`POST /api/v1/repos/{owner}/{repo}/releases/{id}/assets?name=...`, and accepts only
an existing draft or prerelease. It checks for an existing same-name attachment
and refuses replacement. Release creation remains available through the Gitea
MCP tool; no raw credential export is required. Returned output records asset
identity, byte count, local streamed SHA256 and server download URL. It explicitly
does **not** claim remote byte-hash verification; root must independently download
and hash the published artifact before treating publication as verified.
If an upload fails after transfer begins, inspect the release before retrying:
failure does not prove that the remote server adopted no attachment. Artifact
files must be frozen before upload; the helper reports the exact streamed hash.
## Ownership and next steps
Codex-9e8r6t retains the named-creation milestone prerelease. This host's eventual
B4 milestone must be distinct and coordinated through Gitea. Root retains actual
push/tag/release/upload decisions, runnable artifacts, concise notes, launch
instructions, known limitations and exact verification scope under the updated
AGENTS.md milestone-release requirement. This probe is preparation, not a published
milestone or acceptance of the current application.
Next: finish the working B4 gate, coordinate its version, push the selected branch
and tag, create the scoped prerelease, upload frozen artifacts, verify remote ref
identities and artifact hashes, and record the resulting release URL. No fresh
credential request is indicated by the successful existing-credential probe.