@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 +14 -1
- package/docs/architecture.md +3 -0
- package/hooks/tezgah_context.py +5 -1
- package/hooks/tezgah_paths.py +28 -0
- package/package.json +1 -1
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.
|
|
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
|
package/docs/architecture.md
CHANGED
|
@@ -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.
|
package/hooks/tezgah_context.py
CHANGED
|
@@ -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
|
|
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))
|
package/hooks/tezgah_paths.py
CHANGED
|
@@ -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