heinzel-github 0.9.1__tar.gz → 0.9.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. heinzel_github-0.9.2/CHANGELOG.md +14 -0
  2. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/PKG-INFO +52 -5
  3. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/README.md +50 -3
  4. heinzel_github-0.9.2/docs/SCREENSHOTS.md +10 -0
  5. heinzel_github-0.9.2/docs/SCREENSHOT_STORY.md +40 -0
  6. heinzel_github-0.9.2/docs/assets/cli.png +0 -0
  7. heinzel_github-0.9.2/docs/assets/screenshots/capture.json +102 -0
  8. heinzel_github-0.9.2/docs/assets/screenshots/index.html +1 -0
  9. heinzel_github-0.9.2/docs/assets/screenshots/issue-changes.png +0 -0
  10. heinzel_github-0.9.2/docs/assets/screenshots/issue-changes.txt +37 -0
  11. heinzel_github-0.9.2/docs/assets/screenshots/issues-json.png +0 -0
  12. heinzel_github-0.9.2/docs/assets/screenshots/issues-json.txt +24 -0
  13. heinzel_github-0.9.2/docs/assets/screenshots/merged-cli.png +0 -0
  14. heinzel_github-0.9.2/docs/assets/screenshots/merged-cli.txt +7 -0
  15. heinzel_github-0.9.2/docs/assets/screenshots/merged-work.png +0 -0
  16. heinzel_github-0.9.2/docs/assets/screenshots/merged-work.txt +38 -0
  17. heinzel_github-0.9.2/docs/assets/screenshots/source-story.md +40 -0
  18. heinzel_github-0.9.2/docs/assets/screenshots/workflow-collection.png +0 -0
  19. heinzel_github-0.9.2/docs/assets/screenshots/workflow-collection.txt +70 -0
  20. heinzel_github-0.9.2/docs/assets/screenshots/workflow-context.png +0 -0
  21. heinzel_github-0.9.2/docs/assets/screenshots/workflow-context.txt +52 -0
  22. heinzel_github-0.9.2/docs/assets/ui.png +0 -0
  23. heinzel_github-0.9.2/docs/screenshot-definition.json +7 -0
  24. heinzel_github-0.9.2/docs/screenshot_fixture.py +122 -0
  25. heinzel_github-0.9.2/docs/screenshots.toml +86 -0
  26. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/plugin-lock.json +3 -2
  27. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/pyproject.toml +44 -2
  28. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/requirements.lock +20 -0
  29. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/__init__.py +10 -0
  30. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/_adapter.py +3 -0
  31. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/_gh.py +5 -1
  32. heinzel_github-0.9.2/src/heinzel_github/_release_feed.py +353 -0
  33. heinzel_github-0.9.2/tests/acceptance/release_feed_installed_test.py +104 -0
  34. heinzel_github-0.9.2/tests/unit/release_feed_test.py +206 -0
  35. heinzel_github-0.9.1/CHANGELOG.md +0 -8
  36. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/.gitignore +0 -0
  37. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/LICENSE +0 -0
  38. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/_client.py +0 -0
  39. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/_models.py +0 -0
  40. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/_module.py +0 -0
  41. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/_service.py +0 -0
  42. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/py.typed +0 -0
  43. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/skills/review-pull-request/SKILL.md +0 -0
  44. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/src/heinzel_github/skills/review-pull-request/references/checklist.md +0 -0
  45. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/conftest.py +0 -0
  46. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/fake_gh.py +0 -0
  47. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/fixtures/issues.json +0 -0
  48. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/fixtures/pulls.json +0 -0
  49. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/integration/capability_test.py +0 -0
  50. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/integration/cli_test.py +0 -0
  51. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/integration/connector_test.py +0 -0
  52. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/integration/gh_test.py +0 -0
  53. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/unit/adapter_test.py +0 -0
  54. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/unit/client_test.py +0 -0
  55. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/unit/contract_test.py +0 -0
  56. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/unit/gh_test.py +0 -0
  57. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/unit/models_test.py +0 -0
  58. {heinzel_github-0.9.1 → heinzel_github-0.9.2}/tests/unit/service_test.py +0 -0
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ ## 0.9.2
4
+
5
+ Add a GitHub release feed for draft workflows. It starts at the current release frontier and reads published
6
+ release notes alongside the matching section of the supplied CHANGELOG. It stops without advancing the cursor
7
+ when a release cannot be matched or the bounded GitHub page may hide releases. Requires Heinzel 0.9.16 or newer.
8
+
9
+ ## 0.9.1
10
+
11
+ Move this plugin to its independent repository project for the Heinzel 0.9.1 plugin contract.
12
+ Own its dependencies, tests and artifacts; consume public contracts without concrete provider dependencies.
13
+
14
+ Earlier history: the heinzel repository before 0.9.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: heinzel-github
3
- Version: 0.9.1
3
+ Version: 0.9.2
4
4
  Summary: Read pull requests and issues from GitHub: the code-host and tracker capabilities.
5
5
  Project-URL: Source, https://github.com/helmut-hoffer-von-ankershoffen/heinzel-plugins/tree/main/plugins/heinzel-github
6
6
  Project-URL: Changelog, https://github.com/helmut-hoffer-von-ankershoffen/heinzel-plugins/blob/main/plugins/heinzel-github/CHANGELOG.md
@@ -8,16 +8,18 @@ Project-URL: Issues, https://github.com/helmut-hoffer-von-ankershoffen/heinzel-p
8
8
  License-Expression: MIT
9
9
  License-File: LICENSE
10
10
  Requires-Python: >=3.12
11
- Requires-Dist: heinzel<0.10,>=0.9.1
11
+ Requires-Dist: heinzel<0.10,>=0.9.16
12
12
  Description-Content-Type: text/markdown
13
13
 
14
14
  # heinzel-github
15
15
 
16
16
  Read pull requests and issues from GitHub, the `code-host` and `tracker` capabilities ([ADR 0028](https://github.com/helmut-hoffer-von-ankershoffen/heinzel/blob/main/docs/adr/0028-integrations-are-capability-adapters.md)): a first-party
17
- [Heinzelmännchen](https://github.com/helmut-hoffer-von-ankershoffen/heinzel) plugin. It is independently released and installed explicitly:
17
+ [Heinzelmännchen](https://github.com/helmut-hoffer-von-ankershoffen/heinzel) plugin.
18
+
19
+ Install it with:
18
20
 
19
21
  ```bash
20
- hz system plugin add github --confirm # a compatible plugin release; run it again to upgrade
22
+ hz system plugin add github --confirm
21
23
  hz system plugin remove heinzel-github
22
24
  ```
23
25
 
@@ -134,4 +136,49 @@ returns is cleaned too.
134
136
 
135
137
  Development and release commands: [repository guide](../../README.md).
136
138
 
137
- Migration provenance: heinzel, before the 0.9 plugin-boundary migration.
139
+
140
+ <!-- screenshots:start -->
141
+ ## Screenshots
142
+
143
+ <img src="docs/assets/screenshots/workflow-collection.png" alt="Explore the fictional weekly code review in the local workflow collection" width="960">
144
+
145
+ Explore the fictional weekly code review in the local workflow collection
146
+
147
+ <img src="docs/assets/screenshots/workflow-context.png" alt="Fictional weekly review declares merged-work and issue inputs; no report was generated" width="960">
148
+
149
+ Fictional weekly review declares merged-work and issue inputs; no report was generated
150
+
151
+ <img src="docs/assets/screenshots/merged-work.png" alt="Fictional merged pull requests in the app terminal, using a fixture-only requester and the real adapter" width="960">
152
+
153
+ Fictional merged pull requests in the app terminal, using a fixture-only requester and the real adapter
154
+
155
+ <img src="docs/assets/screenshots/issue-changes.png" alt="Fictional issue changes, owners and states in the app terminal, using a fixture-only requester" width="960">
156
+
157
+ Fictional issue changes, owners and states in the app terminal, using a fixture-only requester
158
+
159
+ <details>
160
+ <summary>Command line</summary>
161
+
162
+ <img src="docs/assets/screenshots/merged-cli.png" alt="Read fictional merged work in the shell with a fixture-only requester and the real adapter" width="960">
163
+
164
+ Read fictional merged work in the shell with a fixture-only requester and the real adapter
165
+
166
+ <img src="docs/assets/screenshots/issues-json.png" alt="Fictional issue results as JSON for scripts and agents, using a fixture-only requester" width="960">
167
+
168
+ Fictional issue results as JSON for scripts and agents, using a fixture-only requester
169
+
170
+ </details>
171
+
172
+ [Open the screenshot gallery](docs/assets/screenshots/index.html).
173
+ <!-- screenshots:end -->
174
+
175
+ ### Release feed for draft workflows
176
+
177
+ With Heinzel 0.9.16 or newer, the GitHub plugin installed from a wheel can supply a release feed to a draft workflow. Give the
178
+ workflow an exact HTTPS GitHub blob URL for the Markdown CHANGELOG. The feed reads the same repository's published
179
+ release notes and the matching literal CHANGELOG section. It starts from the current release frontier and returns
180
+ later releases in publication order.
181
+
182
+ An ambiguous tag, a lost frontier, or a full GitHub page of 100 entries including drafts stops the read without
183
+ advancing the cursor. The feed uses `gh` and holds the selected credential privately for the read. It never stores
184
+ or displays the token. Changing the selected account, configuration, or executable requires a new review.
@@ -1,10 +1,12 @@
1
1
  # heinzel-github
2
2
 
3
3
  Read pull requests and issues from GitHub, the `code-host` and `tracker` capabilities ([ADR 0028](https://github.com/helmut-hoffer-von-ankershoffen/heinzel/blob/main/docs/adr/0028-integrations-are-capability-adapters.md)): a first-party
4
- [Heinzelmännchen](https://github.com/helmut-hoffer-von-ankershoffen/heinzel) plugin. It is independently released and installed explicitly:
4
+ [Heinzelmännchen](https://github.com/helmut-hoffer-von-ankershoffen/heinzel) plugin.
5
+
6
+ Install it with:
5
7
 
6
8
  ```bash
7
- hz system plugin add github --confirm # a compatible plugin release; run it again to upgrade
9
+ hz system plugin add github --confirm
8
10
  hz system plugin remove heinzel-github
9
11
  ```
10
12
 
@@ -121,4 +123,49 @@ returns is cleaned too.
121
123
 
122
124
  Development and release commands: [repository guide](../../README.md).
123
125
 
124
- Migration provenance: heinzel, before the 0.9 plugin-boundary migration.
126
+
127
+ <!-- screenshots:start -->
128
+ ## Screenshots
129
+
130
+ <img src="docs/assets/screenshots/workflow-collection.png" alt="Explore the fictional weekly code review in the local workflow collection" width="960">
131
+
132
+ Explore the fictional weekly code review in the local workflow collection
133
+
134
+ <img src="docs/assets/screenshots/workflow-context.png" alt="Fictional weekly review declares merged-work and issue inputs; no report was generated" width="960">
135
+
136
+ Fictional weekly review declares merged-work and issue inputs; no report was generated
137
+
138
+ <img src="docs/assets/screenshots/merged-work.png" alt="Fictional merged pull requests in the app terminal, using a fixture-only requester and the real adapter" width="960">
139
+
140
+ Fictional merged pull requests in the app terminal, using a fixture-only requester and the real adapter
141
+
142
+ <img src="docs/assets/screenshots/issue-changes.png" alt="Fictional issue changes, owners and states in the app terminal, using a fixture-only requester" width="960">
143
+
144
+ Fictional issue changes, owners and states in the app terminal, using a fixture-only requester
145
+
146
+ <details>
147
+ <summary>Command line</summary>
148
+
149
+ <img src="docs/assets/screenshots/merged-cli.png" alt="Read fictional merged work in the shell with a fixture-only requester and the real adapter" width="960">
150
+
151
+ Read fictional merged work in the shell with a fixture-only requester and the real adapter
152
+
153
+ <img src="docs/assets/screenshots/issues-json.png" alt="Fictional issue results as JSON for scripts and agents, using a fixture-only requester" width="960">
154
+
155
+ Fictional issue results as JSON for scripts and agents, using a fixture-only requester
156
+
157
+ </details>
158
+
159
+ [Open the screenshot gallery](docs/assets/screenshots/index.html).
160
+ <!-- screenshots:end -->
161
+
162
+ ### Release feed for draft workflows
163
+
164
+ With Heinzel 0.9.16 or newer, the GitHub plugin installed from a wheel can supply a release feed to a draft workflow. Give the
165
+ workflow an exact HTTPS GitHub blob URL for the Markdown CHANGELOG. The feed reads the same repository's published
166
+ release notes and the matching literal CHANGELOG section. It starts from the current release frontier and returns
167
+ later releases in publication order.
168
+
169
+ An ambiguous tag, a lost frontier, or a full GitHub page of 100 entries including drafts stops the read without
170
+ advancing the cursor. The feed uses `gh` and holds the selected credential privately for the read. It never stores
171
+ or displays the token. Changing the selected account, configuration, or executable requires a new review.
@@ -0,0 +1,10 @@
1
+ # Screenshot gallery
2
+
3
+ From the collection root, run `make screenshots NAME=heinzel-github OPEN=1`.
4
+ Review the [contact sheet](assets/screenshots/index.html) before committing.
5
+ The [scene plan](screenshots.toml) describes the real UI and CLI captures.
6
+ `make screenshots-check NAME=heinzel-github` verifies freshness offline.
7
+
8
+ Captures use a temporary fictional profile without connected accounts. The generated
9
+ [manifest](assets/screenshots/capture.json) records the SDK version and input/image digests.
10
+ See the [author guide](../../../docs/SCREENSHOT_AUTHORING.md) for human and agent commands.
@@ -0,0 +1,40 @@
1
+ ## Audience and outcome
2
+
3
+ A developer or team lead considering a GitHub connector should see how a local workflow can declare both merged pull requests and updated issues as inputs, and what those reads return. The story should make clear that the example is fictional, the workflow is only declared, and no review report has been generated.
4
+
5
+ ## Scenes
6
+
7
+ 1. **Workflow collection, light:** Find the fictional Weekly code review alongside local workflows. This establishes where the example is discovered.
8
+ 2. **Workflow context, dark:** Inspect the same workflow’s distinct detail state: its two capability inputs, repository, and intended output. It is a declaration, not a completed review.
9
+ 3. **Merged work, app terminal:** Show the fictional merged pull requests returned by the real adapter through the fixture-only requester.
10
+ 4. **Issue changes, app terminal:** Show fictional issue titles, states, and owners; the adapter excludes pull requests from issue results.
11
+ 5. **Merged work, CLI:** Show the same useful read in a native terminal, identifying the requester as demonstration-only.
12
+ 6. **Issues as JSON, CLI:** Show a different capability and output format for scripts, with fictional data.
13
+
14
+ The first two are Core feature UI scenes with different purposes; the app-terminal scenes are terminal results within the app, not feature UI. The existing plan already expresses this story and is preserved below. Its routes and rendered results still require capture-time verification.
15
+
16
+ ## Fictional fixtures
17
+
18
+ `docs/screenshot_fixture.py` creates the local Weekly code review contract in isolated state, binds both capabilities to GitHub, and supplies `DemoGh` responses for `acme/widgets`. Its `showcase.merged` and `showcase.issues` operations use the real adapter with October 2026 fixture responses. The names, repository, accounts, PRs, issues, and links are example data; they are not evidence of a real GitHub connection. The fixture’s fixed window and `browser_time` make the story coherent. Some raw fixture records reuse an API URL or ID despite differing displayed numbers; do not present those raw fields as consistent production records.
19
+
20
+ ## Source-bound UI surface inventory
21
+
22
+ - `pyproject.toml` declares both `heinzel.modules` and `heinzel.connected_sources` entrypoints as `github = "heinzel_github"`. Their target, `src/heinzel_github/__init__.py`, configures the module, settings, services, skill, two read capability providers, `info` operation, system-info contribution, and offline and live health contributions. The connected-source entrypoint points to that same package; the supplied source does not independently establish a separate connector screen or its exact rendering.
23
+ - `src/heinzel_github/_module.py` declares the GitHub module. `src/heinzel_github/_adapter.py` implements merged pull-request and updated-issue reads. No plugin-specific Page, View, navigation, channel, approval, setup, or footer declaration appears in the supplied plugin source. That absence alone does not rule out Core-rendered UI.
24
+ - `README.md` explicitly describes Core Settings → Connectors, connector list/test, system capability list, system info, and doctor. `src/heinzel_github/__init__.py` and `_service.py` provide the info and health data those generic surfaces may render; exact routes and visual controls are not established by these sources. The live test contacts GitHub when explicitly run, so it is outside this offline fixture story.
25
+ - `docs/screenshot_fixture.py` contributes the fictional workflow and two fixture-only operations. `docs/screenshots.toml` declares `/contracts` and `/contracts/weekly-code-review` for collection and detail captures. These are Core workflow surfaces, not GitHub-owned screens; the provided plan is evidence of the intended detail route, not proof that it currently renders. If capture cannot verify it, do not substitute invented HTML or an assumed route.
26
+ - `src/heinzel_github/__init__.py` conditionally registers `GithubReleaseFeeds` from `src/heinzel_github/_release_feed.py`; `README.md` describes its draft-workflow release-feed use. The supplied fixture does not demonstrate that flow or establish its UI, so no release-feed screenshot is claimed.
27
+ - GitHub and `gh auth login` are external provider tools. The app-terminal and native CLI outputs are terminal surfaces. The `review-pull-request` skill declared in `src/heinzel_github/skills/review-pull-request/SKILL.md` is agent guidance, not an evidenced product screen. The existence of the `info` CLI operation does not prove it is terminal-only.
28
+
29
+ ## Privacy pitfalls
30
+
31
+ Normal presentation fictionalization is limited to these explicit mappings: verified owning-interpreter paths become `/demo-profile/.venv`, and only the verified whole hostname detail in the genuine Doctor row becomes `demo-host`. These mappings change no SDK health status or remaining detail and establish no privacy acceptance. Unknown identities still fail, and an independent reviewer must inspect every image and transcript. Review account names, paths, hostnames, URLs, environment-derived details, tokens, logs, browser chrome, and unrelated background content; fixture labels alone do not establish privacy. Do not run the live connector test during this offline story.
32
+
33
+ ## Acceptance criteria
34
+
35
+ - Capture the two genuine Core workflow states in applied light and dark appearances, plus the distinct app-terminal and native CLI results. Verify actual routes, headings, and data during capture; do not treat this source review as a successful capture.
36
+ - The collection and detail must show meaningfully different states. Reject duplicate images, caption-only changes, terminal output represented as feature UI, and forged HTML.
37
+ - Verify the merged results and issue results against the fixture and adapter, including exclusion of the PR-shaped issue; show JSON only if it is the actual CLI output. Clearly label the fixture-only requester and fictional data.
38
+ - Do not imply that the declared workflow ran, that a report exists, or that the fixture proves a live GitHub login or production health.
39
+ - Inspect every image and transcript independently for privacy and truthful presentation before publication. Only the narrowly specified path and Doctor-host mappings are permitted; unknown identities fail review.
40
+ - The TOML below was checked against the requested structure by inspection only. No parser, fixture, application, capture, network call, or source code was executed, so runtime route, theme, and output validation remains outstanding.
Binary file
@@ -0,0 +1,102 @@
1
+ {
2
+ "format": 1,
3
+ "plugin": "heinzel-github",
4
+ "core_version": "0.9.18",
5
+ "inputs_sha256": "332ffc4a251d426fc1e01dc6295a91357db2114443b33d63d63fe1b6936f9fe9",
6
+ "images": {
7
+ "docs/assets/screenshots/workflow-collection.png": "9a2115fd574e4b823feb72bede3c0cc747b9402990a7a3f67294a68767adc474",
8
+ "docs/assets/screenshots/workflow-context.png": "82139ef90338ac3320a0983c79d6132c24d1888a556182af06adde5fec5f217b",
9
+ "docs/assets/screenshots/merged-work.png": "8ff2207ebeaaae52e02d3718867d056fa8b2de5410e3ca885598c568ab0af79e",
10
+ "docs/assets/screenshots/issue-changes.png": "5e5cd61862c5982db2102d6d691e80161462915ff0d985438bb8b2550ee286e0",
11
+ "docs/assets/screenshots/merged-cli.png": "787d4a4a73a860dbf4b33fd849f9737e0a58e5495e3e94ea1104a0e60bdf7233",
12
+ "docs/assets/screenshots/issues-json.png": "ba32601ae9d5cbf3c0925b64388c8786141602e603d5343e8e03efd6365d52bd"
13
+ },
14
+ "review_bundle": {
15
+ "format": 2,
16
+ "source_story": {
17
+ "path": "source-story.md",
18
+ "sha256": "a419a4980b5369574d78f4b08c378dca67bdc84d904fb6bd0aebde2a19b80f00"
19
+ },
20
+ "definition": {
21
+ "format": 1,
22
+ "reviewer": "Codex feature-story agent",
23
+ "source_sha256": "0c55c663eadfffa985b01fda7f1a9778f22eb6fe9254f1c08f051a638b93aad6",
24
+ "plan_sha256": "9d204ce8608ed8eb229529b4fc0fa73fac29b39b2dd9e450b5b4a9f3f9fd55d7",
25
+ "story_sha256": "a419a4980b5369574d78f4b08c378dca67bdc84d904fb6bd0aebde2a19b80f00"
26
+ },
27
+ "plugin": "heinzel-github",
28
+ "core_version": "0.9.18",
29
+ "inputs_sha256": "332ffc4a251d426fc1e01dc6295a91357db2114443b33d63d63fe1b6936f9fe9",
30
+ "screenshots": [
31
+ {
32
+ "path": "docs/assets/screenshots/workflow-collection.png",
33
+ "surface": "ui",
34
+ "caption": "Explore the fictional weekly code review in the local workflow collection"
35
+ },
36
+ {
37
+ "path": "docs/assets/screenshots/workflow-context.png",
38
+ "surface": "ui",
39
+ "caption": "Fictional weekly review declares merged-work and issue inputs; no report was generated"
40
+ },
41
+ {
42
+ "path": "docs/assets/screenshots/merged-work.png",
43
+ "surface": "ui",
44
+ "caption": "Fictional merged pull requests in the app terminal, using a fixture-only requester and the real adapter"
45
+ },
46
+ {
47
+ "path": "docs/assets/screenshots/issue-changes.png",
48
+ "surface": "ui",
49
+ "caption": "Fictional issue changes, owners and states in the app terminal, using a fixture-only requester"
50
+ },
51
+ {
52
+ "path": "docs/assets/screenshots/merged-cli.png",
53
+ "surface": "cli",
54
+ "caption": "Read fictional merged work in the shell with a fixture-only requester and the real adapter"
55
+ },
56
+ {
57
+ "path": "docs/assets/screenshots/issues-json.png",
58
+ "surface": "cli",
59
+ "caption": "Fictional issue results as JSON for scripts and agents, using a fixture-only requester"
60
+ }
61
+ ],
62
+ "images": {
63
+ "workflow-collection.png": "9a2115fd574e4b823feb72bede3c0cc747b9402990a7a3f67294a68767adc474",
64
+ "workflow-context.png": "82139ef90338ac3320a0983c79d6132c24d1888a556182af06adde5fec5f217b",
65
+ "merged-work.png": "8ff2207ebeaaae52e02d3718867d056fa8b2de5410e3ca885598c568ab0af79e",
66
+ "issue-changes.png": "5e5cd61862c5982db2102d6d691e80161462915ff0d985438bb8b2550ee286e0",
67
+ "merged-cli.png": "787d4a4a73a860dbf4b33fd849f9737e0a58e5495e3e94ea1104a0e60bdf7233",
68
+ "issues-json.png": "ba32601ae9d5cbf3c0925b64388c8786141602e603d5343e8e03efd6365d52bd"
69
+ },
70
+ "transcripts": {
71
+ "workflow-collection.txt": "0efdfa3a76168448e34c421f4183c3bc0f15f206ddd9f62e3dd732af4f490fd8",
72
+ "workflow-context.txt": "221dca27393be2e21cb9892f6d7e5a5bae1328a29fb72356e0f81017a8df7e6a",
73
+ "merged-work.txt": "ab950558a095b4ab4b79af69bc5fef6f5f675f8cc4ae84dfb62ca92a6085f086",
74
+ "issue-changes.txt": "dda7473ff6231e045f48ede7a639ca463a9a32d6e81bcef860718fd1e52a19cc",
75
+ "merged-cli.txt": "e4df52085e704c49ba37bd75f62656de48cd879405856220a53bcebb7efdebb4",
76
+ "issues-json.txt": "0478f05c2513c3aec957a26c792f41ff2893fb1eddea11b4f9b472e93b9ac0a4"
77
+ },
78
+ "bundle_sha256": "7365f2acd21fc3e1059991cb07196b4ddce6002e38c0722ab51ad29b517d08fe"
79
+ },
80
+ "privacy_review": {
81
+ "format": 1,
82
+ "bundle_sha256": "7365f2acd21fc3e1059991cb07196b4ddce6002e38c0722ab51ad29b517d08fe",
83
+ "reviewer": "Codex privacy agent",
84
+ "decision": "approve",
85
+ "checked_images": [
86
+ "workflow-collection.png",
87
+ "workflow-context.png",
88
+ "merged-work.png",
89
+ "issue-changes.png",
90
+ "merged-cli.png",
91
+ "issues-json.png"
92
+ ],
93
+ "checks": {
94
+ "tokens_absent": true,
95
+ "personal_data_absent": true,
96
+ "feature_relevant": true,
97
+ "multiple_ui_scenes": true,
98
+ "captions_accurate": true
99
+ },
100
+ "findings": []
101
+ }
102
+ }
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>heinzel-github screenshots</title><style>body{font:16px/1.6 system-ui;margin:2rem;background:#faf8f3;color:#263b32}main{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:1rem}figure{margin:0;padding:1rem;background:white;border:1px solid #d8ddd3;border-radius:12px}img{width:100%;height:auto}figcaption{margin-top:.75rem}a:focus-visible{outline:3px solid #a64028}</style><h1>heinzel-github</h1><p>Isolated demonstration profile · Core 0.9.18 · Review these captures before committing. Click an image to inspect it at full size.</p><main><figure><a href="workflow-collection.png"><img src="workflow-collection.png" alt="Explore the fictional weekly code review in the local workflow collection"></a><figcaption>UI · Explore the fictional weekly code review in the local workflow collection</figcaption></figure><figure><a href="workflow-context.png"><img src="workflow-context.png" alt="Fictional weekly review declares merged-work and issue inputs; no report was generated"></a><figcaption>UI · Fictional weekly review declares merged-work and issue inputs; no report was generated</figcaption></figure><figure><a href="merged-work.png"><img src="merged-work.png" alt="Fictional merged pull requests in the app terminal, using a fixture-only requester and the real adapter"></a><figcaption>UI · Fictional merged pull requests in the app terminal, using a fixture-only requester and the real adapter</figcaption></figure><figure><a href="issue-changes.png"><img src="issue-changes.png" alt="Fictional issue changes, owners and states in the app terminal, using a fixture-only requester"></a><figcaption>UI · Fictional issue changes, owners and states in the app terminal, using a fixture-only requester</figcaption></figure><figure><a href="merged-cli.png"><img src="merged-cli.png" alt="Read fictional merged work in the shell with a fixture-only requester and the real adapter"></a><figcaption>CLI · Read fictional merged work in the shell with a fixture-only requester and the real adapter</figcaption></figure><figure><a href="issues-json.png"><img src="issues-json.png" alt="Fictional issue results as JSON for scripts and agents, using a fixture-only requester"></a><figcaption>CLI · Fictional issue results as JSON for scripts and agents, using a fixture-only requester</figcaption></figure></main></html>
@@ -0,0 +1,37 @@
1
+ Skip to content
2
+ Heinzelmännchen
3
+ Heinzelmännchen
4
+ Contracts
5
+ Team graph
6
+ Weekly code review
7
+ Organisation
8
+ Team roster
9
+ M
10
+ Mira
11
+ · EM
12
+ Today
13
+ Today
14
+ Doctor: 3 checks need attention
15
+
16
+ ai.access ai access, system.doctor installation, system.runner claude-code
17
+
18
+ Open
19
+ Ask about it
20
+ v0.9.18
21
+ Plugins changed, warning
22
+ Updates, off
23
+ 0
24
+ System health, warning
25
+ Calendar unavailable
26
+ Daemon not installed, off
27
+ Chat
28
+ Terminal
29
+ Demo complete
30
+ $ hz showcase issues acme/widgets; printf '\033]0;Demo complete\007'
31
+ ┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┓
32
+ ┃ Issue ┃ Title ┃ State ┃ Owner ┃
33
+ ┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━┩
34
+ │ acme/widgets#3 │ Widgets wobble at high speed │ open │ grace │
35
+ │ acme/widgets#4 │ Document the widget API │ closed │ ada │
36
+ └────────────────┴──────────────────────────────┴────────┴───────┘
37
+ $
@@ -0,0 +1,24 @@
1
+ [
2
+ {
3
+ "key": "acme/widgets#3",
4
+ "title": "Widgets wobble at high speed",
5
+ "url": "https://github.com/acme/widgets/issues/3",
6
+ "state": "open",
7
+ "updated_at": "2026-10-05T10:00:00Z",
8
+ "assignee": "grace",
9
+ "labels": [
10
+ "bug"
11
+ ]
12
+ },
13
+ {
14
+ "key": "acme/widgets#4",
15
+ "title": "Document the widget API",
16
+ "url": "https://github.com/acme/widgets/issues/4",
17
+ "state": "closed",
18
+ "updated_at": "2026-10-22T09:00:00Z",
19
+ "assignee": "ada",
20
+ "labels": [
21
+ "docs"
22
+ ]
23
+ }
24
+ ]
@@ -0,0 +1,7 @@
1
+ ┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┓
2
+ ┃ Merged ┃ Pull request ┃ Author ┃
3
+ ┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━┩
4
+ │ 20 Oct │ #7 Render widgets in dark mode │ ada │
5
+ │ 22 Oct │ #8 Keep the last row when exporting widgets │ mira │
6
+ │ 23 Oct │ #9 Add release readiness checks │ jonas │
7
+ └────────┴─────────────────────────────────────────────┴────────┘
@@ -0,0 +1,38 @@
1
+ Skip to content
2
+ Heinzelmännchen
3
+ Heinzelmännchen
4
+ Contracts
5
+ Team graph
6
+ Weekly code review
7
+ Organisation
8
+ Team roster
9
+ M
10
+ Mira
11
+ · EM
12
+ Today
13
+ Today
14
+ Doctor: 3 checks need attention
15
+
16
+ ai.access ai access, system.doctor installation, system.runner claude-code
17
+
18
+ Open
19
+ Ask about it
20
+ v0.9.18
21
+ Plugins changed, warning
22
+ Updates, off
23
+ 0
24
+ System health, warning
25
+ Calendar unavailable
26
+ Daemon not installed, off
27
+ Chat
28
+ Terminal
29
+ Demo complete
30
+ $ hz showcase merged acme/widgets; printf '\033]0;Demo complete\007'
31
+ ┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┓
32
+ ┃ Merged ┃ Pull request ┃ Author ┃
33
+ ┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━┩
34
+ │ 20 Oct │ #7 Render widgets in dark mode │ ada │
35
+ │ 22 Oct │ #8 Keep the last row when exporting widgets │ mira │
36
+ │ 23 Oct │ #9 Add release readiness checks │ jonas │
37
+ └────────┴─────────────────────────────────────────────┴────────┘
38
+ $
@@ -0,0 +1,40 @@
1
+ ## Audience and outcome
2
+
3
+ A developer or team lead considering a GitHub connector should see how a local workflow can declare both merged pull requests and updated issues as inputs, and what those reads return. The story should make clear that the example is fictional, the workflow is only declared, and no review report has been generated.
4
+
5
+ ## Scenes
6
+
7
+ 1. **Workflow collection, light:** Find the fictional Weekly code review alongside local workflows. This establishes where the example is discovered.
8
+ 2. **Workflow context, dark:** Inspect the same workflow’s distinct detail state: its two capability inputs, repository, and intended output. It is a declaration, not a completed review.
9
+ 3. **Merged work, app terminal:** Show the fictional merged pull requests returned by the real adapter through the fixture-only requester.
10
+ 4. **Issue changes, app terminal:** Show fictional issue titles, states, and owners; the adapter excludes pull requests from issue results.
11
+ 5. **Merged work, CLI:** Show the same useful read in a native terminal, identifying the requester as demonstration-only.
12
+ 6. **Issues as JSON, CLI:** Show a different capability and output format for scripts, with fictional data.
13
+
14
+ The first two are Core feature UI scenes with different purposes; the app-terminal scenes are terminal results within the app, not feature UI. The existing plan already expresses this story and is preserved below. Its routes and rendered results still require capture-time verification.
15
+
16
+ ## Fictional fixtures
17
+
18
+ `docs/screenshot_fixture.py` creates the local Weekly code review contract in isolated state, binds both capabilities to GitHub, and supplies `DemoGh` responses for `acme/widgets`. Its `showcase.merged` and `showcase.issues` operations use the real adapter with October 2026 fixture responses. The names, repository, accounts, PRs, issues, and links are example data; they are not evidence of a real GitHub connection. The fixture’s fixed window and `browser_time` make the story coherent. Some raw fixture records reuse an API URL or ID despite differing displayed numbers; do not present those raw fields as consistent production records.
19
+
20
+ ## Source-bound UI surface inventory
21
+
22
+ - `pyproject.toml` declares both `heinzel.modules` and `heinzel.connected_sources` entrypoints as `github = "heinzel_github"`. Their target, `src/heinzel_github/__init__.py`, configures the module, settings, services, skill, two read capability providers, `info` operation, system-info contribution, and offline and live health contributions. The connected-source entrypoint points to that same package; the supplied source does not independently establish a separate connector screen or its exact rendering.
23
+ - `src/heinzel_github/_module.py` declares the GitHub module. `src/heinzel_github/_adapter.py` implements merged pull-request and updated-issue reads. No plugin-specific Page, View, navigation, channel, approval, setup, or footer declaration appears in the supplied plugin source. That absence alone does not rule out Core-rendered UI.
24
+ - `README.md` explicitly describes Core Settings → Connectors, connector list/test, system capability list, system info, and doctor. `src/heinzel_github/__init__.py` and `_service.py` provide the info and health data those generic surfaces may render; exact routes and visual controls are not established by these sources. The live test contacts GitHub when explicitly run, so it is outside this offline fixture story.
25
+ - `docs/screenshot_fixture.py` contributes the fictional workflow and two fixture-only operations. `docs/screenshots.toml` declares `/contracts` and `/contracts/weekly-code-review` for collection and detail captures. These are Core workflow surfaces, not GitHub-owned screens; the provided plan is evidence of the intended detail route, not proof that it currently renders. If capture cannot verify it, do not substitute invented HTML or an assumed route.
26
+ - `src/heinzel_github/__init__.py` conditionally registers `GithubReleaseFeeds` from `src/heinzel_github/_release_feed.py`; `README.md` describes its draft-workflow release-feed use. The supplied fixture does not demonstrate that flow or establish its UI, so no release-feed screenshot is claimed.
27
+ - GitHub and `gh auth login` are external provider tools. The app-terminal and native CLI outputs are terminal surfaces. The `review-pull-request` skill declared in `src/heinzel_github/skills/review-pull-request/SKILL.md` is agent guidance, not an evidenced product screen. The existence of the `info` CLI operation does not prove it is terminal-only.
28
+
29
+ ## Privacy pitfalls
30
+
31
+ Normal presentation fictionalization is limited to these explicit mappings: verified owning-interpreter paths become `/demo-profile/.venv`, and only the verified whole hostname detail in the genuine Doctor row becomes `demo-host`. These mappings change no SDK health status or remaining detail and establish no privacy acceptance. Unknown identities still fail, and an independent reviewer must inspect every image and transcript. Review account names, paths, hostnames, URLs, environment-derived details, tokens, logs, browser chrome, and unrelated background content; fixture labels alone do not establish privacy. Do not run the live connector test during this offline story.
32
+
33
+ ## Acceptance criteria
34
+
35
+ - Capture the two genuine Core workflow states in applied light and dark appearances, plus the distinct app-terminal and native CLI results. Verify actual routes, headings, and data during capture; do not treat this source review as a successful capture.
36
+ - The collection and detail must show meaningfully different states. Reject duplicate images, caption-only changes, terminal output represented as feature UI, and forged HTML.
37
+ - Verify the merged results and issue results against the fixture and adapter, including exclusion of the PR-shaped issue; show JSON only if it is the actual CLI output. Clearly label the fixture-only requester and fictional data.
38
+ - Do not imply that the declared workflow ran, that a report exists, or that the fixture proves a live GitHub login or production health.
39
+ - Inspect every image and transcript independently for privacy and truthful presentation before publication. Only the narrowly specified path and Doctor-host mappings are permitted; unknown identities fail review.
40
+ - The TOML below was checked against the requested structure by inspection only. No parser, fixture, application, capture, network call, or source code was executed, so runtime route, theme, and output validation remains outstanding.
@@ -0,0 +1,70 @@
1
+ Skip to content
2
+ Heinzelmännchen
3
+ Heinzelmännchen
4
+ Contracts
5
+ Team graph
6
+ Weekly code review
7
+ Organisation
8
+ Team roster
9
+ M
10
+ Mira
11
+ · EM
12
+ Workflow
13
+ Contracts
14
+
15
+ What hz knows of your workflow: the systems you connected, the artifacts playbooks keep and discovery finds, your contracts and the ones playbooks suggest, and what they maintain. Select a node for its details and its command.
16
+
17
+ Discover
18
+ merged
19
+ issues
20
+ ai-access
21
+ claude-code
22
+ , System
23
+ code-host
24
+ github
25
+ , System
26
+ directory
27
+ one-on-ones
28
+ , System
29
+ team-graph
30
+ hz-graph
31
+ , System
32
+ tracker
33
+ github
34
+ , System
35
+ Weekly code review
36
+ , Contract
37
+ team-graph-keeper
38
+ graph
39
+ suggested
40
+ , Suggested contract
41
+ notes
42
+ me:weekly-code-review
43
+ , Output
44
+ team-graph-keeper
45
+ team-graph-keeper
46
+ , Output
47
+ Legend
48
+ System
49
+ Artifact type
50
+ Discovered artifact
51
+ Contract
52
+ Suggested contract
53
+ Output
54
+ All contracts
55
+ Weekly code review
56
+ me:weekly-code-review
57
+ by hand only
58
+ v0.9.18
59
+ Updates, off
60
+ 0
61
+ System health, warning
62
+ Calendar unavailable
63
+ Daemon not installed, off
64
+ Chat
65
+ New chat
66
+ Your message
67
+ Default
68
+
69
+ Up to $0.25 per message · this chat $0.00
70
+ Runs your agent runner and may cost money: at most $0.25 per message, $2.00 per chat; this chat has cost $0.00. It reads with hz and asks you before it changes anything.
@@ -0,0 +1,52 @@
1
+ Skip to content
2
+ Heinzelmännchen
3
+ Heinzelmännchen
4
+ Contracts
5
+ Team graph
6
+ Weekly code review
7
+ Organisation
8
+ Team roster
9
+ M
10
+ Mira
11
+ · EM
12
+ weekly-code-review
13
+ Weekly code review
14
+
15
+ Review merged work and issue changes, with owners and source links.
16
+
17
+ ready
18
+ Schedule: by hand only
19
+ 0 drafts so far
20
+ /demo-profile/state_dir/demonstration-contracts/weekly-code-review.prose.md
21
+
22
+ it has no schedule: add `schedule: "0 7 * * MON"` under `hz:` in /demo-profile/state_dir/demonstration-contracts/weekly-code-review.prose.md, or run it by hand: hz heinzel wake me:weekly-code-review
23
+
24
+ Requirements
25
+ code-host:read github
26
+ tracker:read github
27
+ agent-runner:read claude-code
28
+ Inputs
29
+ merged: code-host.merged_pull_requests
30
+ issues: tracker.issues_updated
31
+ Outputs
32
+ notes: markdown
33
+ Next steps
34
+ hz heinzel wake me:weekly-code-review --dry-run
35
+ Run in terminal
36
+ the packet the agent gets; nothing is spent
37
+ hz heinzel wake me:weekly-code-review
38
+ Run in terminal
39
+ draft it now, at most 0.5 USD; the draft is saved under /demo-profile/data_dir/workflow/drafts/me-weekly-code-review
40
+ v0.9.18
41
+ Updates, off
42
+ 0
43
+ System health, warning
44
+ Calendar unavailable
45
+ Daemon not installed, off
46
+ Chat
47
+ New chat
48
+ Your message
49
+ Default
50
+
51
+ Up to $0.25 per message · this chat $0.00
52
+ Runs your agent runner and may cost money: at most $0.25 per message, $2.00 per chat; this chat has cost $0.00. It reads with hz and asks you before it changes anything.
Binary file
@@ -0,0 +1,7 @@
1
+ {
2
+ "format": 1,
3
+ "reviewer": "Codex feature-story agent",
4
+ "source_sha256": "0c55c663eadfffa985b01fda7f1a9778f22eb6fe9254f1c08f051a638b93aad6",
5
+ "plan_sha256": "9d204ce8608ed8eb229529b4fc0fa73fac29b39b2dd9e450b5b4a9f3f9fd55d7",
6
+ "story_sha256": "a419a4980b5369574d78f4b08c378dca67bdc84d904fb6bd0aebde2a19b80f00"
7
+ }