toolspace › registry › Muninn issue_close
Muninn issue_close
Close a GitHub issue with a learning synthesis. Posts the synthesis as a closing comment, then writes it as a `decision` memory tagged with the issue number — encoded as a flowing DAG so the close ack returns the moment GitHub returns 2xx, while the memory write happens detached.
Install
install-manifest install https://raw.githubusercontent.com/oaustegard/muninn-utilities/main/manifests/issue-close/muninn-issue-close.v0.4.json
manifest JSON · source · docs · issues · homepage
Security
| Kill switch | manual Manual procedure: — |
|---|---|
| Smoke contract | shell timeout 10s |
Scopes
-
github.issuesread, write github-pat (coarse; full account write access)Posts a closing comment and toggles state to closed on the target issue. Reads the current issue state to decide whether the close is a no-op.
-
memory.trackingwrite turso-libsql-token (coarse; full DB access)Stores the learning synthesis as a `decision`-typed memory tagged `issue-N` and the short-form repo identifier so that future recall can find it from either side of the issue/memory pair.
-
net.outboundread, write api.github.com, *.turso.ioTalks to api.github.com (REST) for issue read/comment/close and to the configured Turso libSQL host for the memory write. No other outbound destinations.
Data boundary
Reads
github.issuessensitivity: low
Transmits
-
api.github.com none-per-vendor-tos
post closing comment + toggle issue state
env.GH_TOKENinput.synthesis
Persists
—
Tool-local retention: 365 day(s).
Actions
-
close destructive
Validate synthesis, close the GitHub issue with it as the closing comment, and store the decision memory in the background. ·
github.issuesmemory.trackingnet.outbound- Goal
- Close a GitHub issue with a learning synthesis and persist the synthesis as a decision memory.
- Inputs
number (req), synthesis (req), repo (default oaustegard/claude-skills), pending_test (bool), extra_tags (string[])- Outputs
{issue_url, comment_url, memory_id, pending_test_applied, detached_failures}- Errors
synthesis_empty, issue_not_found, auth_invalid, close_failed- Example
close number=619 synthesis='Pattern X works because Y' repo=oaustegard/claude-skills
Environment
GH_TOKEN |
GitHub personal access token. Needs write access (issues scope) to the target repo. Classic PAT with repo scope works; fine-grained PAT with explicit per-repo Issues:write is preferred. The same token is used by perch_publish, blog_publish, perch_triage, and verify_patch — share-by-default is intentional. required · secret: yes · obtain |
|---|---|
GITHUB_TOKEN |
Optional fallback for GH_TOKEN. The source reads `os.environ.get('GH_TOKEN') or os.environ.get('GITHUB_TOKEN')`. optional · secret: yes · obtain |
TURSO_TOKEN |
Turso libSQL auth token for the Muninn memory database. The decision memory is written here. Required. required · secret: yes · obtain |
TURSO_URL |
Hostname of the Muninn memory libSQL database, e.g. 'mydb-username.turso.io'. required · secret: no |
Verify & cost
| Install fee | 0¢ |
|---|---|
| Monthly fee | 0¢ |
| Usage model | external |
Runtime
runtime: python-module · install method: preinstalled · entrypoint: python -m muninn_utils.issue_close
Two-artifact close: GitHub issue gets the implementation log (the closing comment), Muninn's memory store gets the behavioral learning (the decision memory). Wraps a `flowing` graph so synthesis-text validation runs BEFORE any GitHub call fires, the close-issue ack is the terminal node (returns immediately on 2xx), and the memory-store + optional pending-test-verification run as detached side-effects whose failure populates `flow.detached_failures` rather than bubbling up. Same shape as `perch_publish` (single primary credential, structured comment) but writes to a different surface (issues, not pages) and with a paired Turso write per close. Issue #5 calls this out as the credential-reuse-with-perch_publish test.
Tags: githubissuesdecision-memorylearning-synthesisflowing
License: MIT
Last fetched 2026-06-18T09:09:16Z (live)