Repository navigation
Conversation
…credentials, data model (TIGER-334) Epic TIGER-334's Phase-1 substrate for the Tiger_Git module: version a custom module in a private repo, cut a release through QA, and receive approved updates — no local machine, no terminal, and (on shared hosting with exec disabled) no git binary. Ships the foundation only; the concrete transports + /api services + TigerPanel UI are Phase 2+. - Tiger_Git (facade): constants, semver/host-allowlist/repo-slug validators, RESOURCE_RELEASE capability resource (owner-only tag/submit, per TIGER-335 — never a role-string compare). - Tiger_Git_Transport_Interface: the one contract ShellTransport + ApiTransport implement with equivalent results; fast-forward-only, allowlisted-host-only, structured secret-free failures. - Tiger_Git_Environment (TIGER-363): capability detection (git binary + exec usable + outbound) → recommended transport; ApiTransport needs only outbound. Network probe behind a test seam. - Tiger_Git_Credential (TIGER-365): write-only credential manager — encrypt-at-rest via Tiger_Crypto, resolve-for-transport-only (no controller/log path), rotate (new before old revoked), revoke, and an Ed25519 deploy-key generator. Supports a Tiger_Secret ref too. - Data model (TIGER-366, migration 20261021000001): git_repo_connection, git_credential, git_operation_log (append-only audit), module_release, module_install_pin — standard columns, ACTIVE-ONLY unique indexes so a reconnect after disconnect is never blocked. - Tiger_Git_WorkingTree + Tiger_Git_Exception value objects; module scaffold (module.json, Bootstrap, acl.ini contract stub); CAPABILITIES.md regenerated. Tests: 19 unit + 12 integration (proven against real MariaDB) — path-escape refusal, env decision logic, keygen framing, credential write-only/round-trip/rotate/revoke, active-only unique freeing on soft-delete, and the model finders. Full unit suite stays green (1150). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ASauLLscjqdsNqBNsx2Typ
Matches the TigerShop/TigerServer product-name convention. Slug (`git`), table prefix (`git_*`), and class names (Tiger_Git_* / Git_*) are unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ASauLLscjqdsNqBNsx2Typ
This was referenced Oct 21, 2026
WebTigers
added a commit
that referenced
this pull request
Oct 21, 2026
…ER-334) The TigerGit epic, landed as one squash of the reviewed stack (#356 foundation ← #357 transports+GitHubAdapter ← #358 services+UI+MCP+reconciler). Version a custom module in a private repo, cut a release through QA, and receive approved updates — with no local machine, no terminal, and (on shared hosting with exec disabled) no git binary. Two interchangeable transports (ShellTransport; ApiTransport with no .git), the GitHubAdapter that composes them, write-only encrypted credentials, an active-only-unique data model + audit log, the no-.git reconciler (status/diff/pull/switchBranch via a merge-base marker), the /api services (Repo/Release/Update; owner-only release capability, approved-only updates), an admin dashboard at /git/admin, and full MCP reach. Both live-GitHub gates passed (commit spike + reconciler) against real public and private repos. Ships as core 1.38.0. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01ASauLLscjqdsNqBNsx2Typ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ASauLLscjqdsNqBNsx2Typ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Epic TIGER-334 — Phase 1 (foundation)
The Phase-1 substrate for the
Tiger_Gitmodule: give a Tiger install first-class git/GitHub — version a custom module in a private repo, cut a release through QA, and receive approved updates — with no local machine, no terminal, and (on shared hosting withexecdisabled) no git binary. No other module talks to GitHub directly.This PR ships the foundation only; the concrete transports, the
/apiservices, and the TigerPanel UI are Phase 2+.What's here (Stories TIGER-363, 365, 366)
Tiger_Git(facade) — constants,isSemver/isAllowedHost/repoSlug/normalizeVersion, and theRESOURCE_RELEASEcapability resource for the owner-onlytag/submitprivileges (per TIGER-335 — a privilege on a capability resource, never a role-string compare).Tiger_Git_Transport_Interface— the one contract bothShellTransportandApiTransportmust satisfy with equivalent results (status/diff/commit/branch/push/pull/tag/releases/archive). Fast-forward-only, allowlisted-host-only, structured secret-free failures (Tiger_Git_Exception).Tiger_Git_Environment(363) — capability detection (git binary +execusable + outbound reachability) → recommended transport.ApiTransportneeds only outbound, which is what makes shared hosting work. The network probe is behind a test seam.Tiger_Git_Credential(365) — the write-only credential manager: encrypt-at-rest viaTiger_Crypto, a singleresolve()read path for transports only (no controller/log path returns a secret), rotate (new verified before old revoked), revoke, and an Ed25519 deploy-key generator. Acredential_refmay also be aTiger_Secretref (SSM, etc.).20261021000001) —git_repo_connection,git_credential,git_operation_log(append-only audit, no secrets),module_release,module_install_pin. Standard columns throughout; active-only unique indexes so disconnecting frees(org_id, module_key)and a reconnect is never blocked (the node-re-enroll bug class, TIGER-274).Tiger_Git_WorkingTree+Tiger_Git_Exceptionvalue objects; module scaffold (module.json,Bootstrap, anacl.inicontract stub);CAPABILITIES.mdregenerated.Tests
WorkingTreepath-escape refusal,Environmentdecision logic via the probe seam, deploy-key OpenSSH framing + uniqueness).Tiger_Crypto, the active-only unique freeing on soft-delete, and every model finder.Not in this PR (Phase 2 — TIGER-364 next)
The concrete
ShellTransport+ApiTransport(the git-over-GitHub-API commit spike is the biggest risk — I'll lead with it), then theRepoConnection/Release/Updateservices + TigerPanel UI.🤖 Generated with Claude Code
https://claude.ai/code/session_01ASauLLscjqdsNqBNsx2Typ