@r1z4x/tezgah 1.8.2 → 1.8.3

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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,18 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.8.3] - 2026-10-13
10
+
11
+ ### Changed
12
+
13
+ - **A release reuses the green CI of its commit.** It waits for the push run of `ci.yml` on the same commit to finish. It skips its own CI run only when that run succeeded, which saves about 12 minutes. Any other outcome runs CI as before.
14
+ - **Fewer full-suite runs.** A change under `.tezgah/` runs no test module, and a workflow file runs the modules that read it. Both used to run all 100. Two large runs on one machine now take turns instead of slowing each other down.
15
+ - **A worktree shows the main checkout's `.tezgah`.** Session start in a linked worktree makes its `.tezgah` a link to the main checkout's workspace. A relative `.tezgah/...` write from a worktree session or subagent now lands there. It used to create a second `.tezgah` that `git worktree remove` deleted.
16
+
17
+ ### Fixed
18
+
19
+ - **A release re-run no longer fails on a current Homebrew formula.** The tap job committed even when the formula already named the version. So a re-run stopped with "nothing to commit". It now commits and pushes only a change.
20
+
9
21
  ## [1.8.2] - 2026-10-13
10
22
 
11
23
  ### Fixed
@@ -1161,7 +1173,8 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
1161
1173
  the copy could not find `hooks/` and died on import. It now links into the
1162
1174
  installed tree, and also installs the command as `tezgah`.
1163
1175
 
1164
- [Unreleased]: https://github.com/r1z4x/tezgah/compare/v1.8.2...HEAD
1176
+ [Unreleased]: https://github.com/r1z4x/tezgah/compare/v1.8.3...HEAD
1177
+ [1.8.3]: https://github.com/r1z4x/tezgah/releases/tag/v1.8.3
1165
1178
  [1.8.2]: https://github.com/r1z4x/tezgah/releases/tag/v1.8.2
1166
1179
  [1.8.1]: https://github.com/r1z4x/tezgah/releases/tag/v1.8.1
1167
1180
  [1.8.0]: https://github.com/r1z4x/tezgah/releases/tag/v1.8.0
@@ -184,6 +184,9 @@ line names every checkout through `worktrees`, which lists
184
184
  checkout is gone, as git's own `prunable` does (`hooks/tezgah_paths.py::worktrees`).
185
185
  It also names a worktree whose own `.tezgah` still holds data from before, with
186
186
  the `tezgah-research import` that moves its lines (`hooks/tezgah_context.py::sibling_line`).
187
+ Session start in a linked worktree makes its `.tezgah` a link to the main one
188
+ (`hooks/tezgah_paths.py::link_workspace`). A relative `.tezgah/...` write lands
189
+ there, and `/.tezgah` goes to the repository's `info/exclude`.
187
190
  A second clone is another repository, with a workspace of its own.
188
191
  A path inside `.tezgah` belongs to the repository around it, never to `.tezgah`.
189
192
  The workspace keeps its own `.git`, so git's top-level answers `.tezgah` there.
@@ -33,6 +33,7 @@ from tezgah_paths import (CACHE, CONTEXT_NUDGE_TOKENS, REPO_MARKS, SWITCHES,
33
33
  ai_research_dir, alts, armed,
34
34
  cache_dir, codegraph_bin, consult_options,
35
35
  ensure_workspace, fallback_cache, have_judge_key, language,
36
+ link_workspace,
36
37
  off, orx_bin, packs, pony_level, project_top, root_for,
37
38
  roots, say, tool,
38
39
  workspace, workspace_from_repo, worktrees, writable_dir)
@@ -2254,7 +2255,10 @@ def context_for(event, cwd, payload=None, with_core=True):
2254
2255
  # the project and given its private git before anything writes there.
2255
2256
  # A root is not a project, and the helper returns None outside a work tree.
2256
2257
  if ws not in roots():
2257
- ensure_workspace(ws)
2258
+ # never link to a `.tezgah` ensure_workspace refused: one the
2259
+ # project tracks or a link the clone placed (review of plan 100)
2260
+ if ensure_workspace(ws) and ws != root:
2261
+ link_workspace(root, ws)
2258
2262
  # The live turn state, first in this region: on a compacted or resumed
2259
2263
  # session it is the one thing the rest of the block cannot re-derive.
2260
2264
  resume = resume_state(root, session_of(payload))
@@ -1271,6 +1271,34 @@ def ensure_workspace(repo):
1271
1271
  return ws
1272
1272
 
1273
1273
 
1274
+ def link_workspace(checkout, main):
1275
+ """`<checkout>/.tezgah` as a link to the main checkout's workspace, for a
1276
+ linked worktree (plan 100): a relative `.tezgah/...` write from the worktree
1277
+ then lands in the one workspace every checkout reads, instead of a second
1278
+ `.tezgah` that `git worktree remove` deletes. `/.tezgah` goes to the
1279
+ repository's `info/exclude`, since the project's `/.tezgah/` ignores only a
1280
+ directory. Leaves any existing `.tezgah` alone; None when nothing was made."""
1281
+ link, target = workspace(checkout), workspace(main)
1282
+ exclude = os.path.join(main, ".git", "info", "exclude")
1283
+ if (os.path.lexists(link) or not os.path.isdir(target)
1284
+ or not os.path.isdir(os.path.join(main, ".git"))):
1285
+ return None
1286
+ try:
1287
+ os.makedirs(os.path.dirname(exclude), exist_ok=True)
1288
+ try:
1289
+ with open(exclude, encoding="utf-8") as fh:
1290
+ body = fh.read()
1291
+ except FileNotFoundError:
1292
+ body = ""
1293
+ if "/.tezgah" not in {line.strip() for line in body.splitlines()}:
1294
+ with open(exclude, "a", encoding="utf-8") as fh:
1295
+ fh.write(("\n" if body and not body.endswith("\n") else "") + "/.tezgah\n")
1296
+ os.symlink(target, link)
1297
+ except OSError:
1298
+ return None
1299
+ return link
1300
+
1301
+
1274
1302
  def _git_config_paths(repo):
1275
1303
  """The config files that could hold this project's identity, most local first.
1276
1304
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@r1z4x/tezgah",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "description": "One shared working contract for every AI coding assistant you run: Claude Code, Codex, Cursor, opencode, dsh and oh-my-pi (omp).",
5
5
  "license": "MIT",
6
6
  "repository": {