# 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 # After a distinct draft/prerelease exists, owner supplies its ID and frozen file: & $publicationPython -I $publicationHelper upload --release-id --file ``` 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.