context-loader 1.3.3__tar.gz → 1.3.4__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: context-loader
3
- Version: 1.3.3
3
+ Version: 1.3.4
4
4
  Summary: Render deterministic local Git context for any executor
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -204,7 +204,7 @@ License: Apache License
204
204
  See the License for the specific language governing permissions and
205
205
  limitations under the License.
206
206
 
207
- Requires-Python: >=3.12, <3.13
207
+ Requires-Python: >=3.12, <3.15
208
208
  Project-URL: Repository, https://github.com/xuanheng-tech/context-loader
209
209
  Project-URL: Issues, https://github.com/xuanheng-tech/context-loader/issues
210
210
  Description-Content-Type: text/markdown
@@ -219,14 +219,14 @@ Python standard library.
219
219
 
220
220
  ## Open-source quick start
221
221
 
222
- Current stable release: **1.3.3**. Local CLI for coding-agent workflows; renders deterministic Markdown or JSON.
222
+ Current stable release: **1.3.4**. Local CLI for coding-agent workflows; renders deterministic Markdown or JSON.
223
223
 
224
224
  ```bash
225
- uv tool install 'context-loader==1.3.3'
225
+ uv tool install 'context-loader==1.3.4'
226
226
  ```
227
227
 
228
228
  ```bash
229
- pip install 'context-loader==1.3.3'
229
+ pip install 'context-loader==1.3.4'
230
230
  ```
231
231
 
232
232
  ```bash
@@ -239,21 +239,21 @@ project-context --repo /path/to/repo --format json
239
239
 
240
240
  ## Install
241
241
 
242
- Source version: `1.3.3`. Install its matching published release or an exact source commit.
242
+ Source version: `1.3.4`. Install its matching published release or an exact source commit.
243
243
 
244
244
  Install via `uv`:
245
245
 
246
246
  ```bash
247
- uv tool install 'context-loader==1.3.3'
247
+ uv tool install 'context-loader==1.3.4'
248
248
  ```
249
249
 
250
250
  Install via `pip`:
251
251
 
252
252
  ```bash
253
- pip install 'context-loader==1.3.3'
253
+ pip install 'context-loader==1.3.4'
254
254
  ```
255
255
 
256
- For development or source-based installs tracking current repository (`1.3.3`):
256
+ For development or source-based installs tracking current repository (`1.3.4`):
257
257
 
258
258
  ```bash
259
259
  uv tool install git+https://github.com/xuanheng-tech/context-loader.git
@@ -279,7 +279,7 @@ part of either distribution; run them from a checkout of the matching tag.
279
279
 
280
280
  ## Platform and Runtime Requirements
281
281
 
282
- - **Python**: Python 3.12 (`>=3.12,<3.13`). Runtime code uses only the Python standard library with zero runtime dependencies.
282
+ - **Python**: Python 3.12–3.14 (`>=3.12,<3.15`). Runtime code uses only the Python standard library with zero runtime dependencies.
283
283
  - **Git**: Requires the standard `git` CLI at the fixed absolute path `/usr/bin/git`. The
284
284
  executable is never resolved through `PATH`, so an installation elsewhere is not used and
285
285
  every invocation fails with exit `1`. Git runs with a sanitized environment that ignores
@@ -350,7 +350,7 @@ set differs, as described under “Compact model consumption”. The declared co
350
350
  "schema_version": 3,
351
351
  "tool": {
352
352
  "name": "context-loader",
353
- "version": "1.3.3"
353
+ "version": "1.3.4"
354
354
  },
355
355
  "repository": {
356
356
  "requested_path": "/canonical/requested/path",
@@ -470,7 +470,7 @@ although 1.1.0 added the top-level `statuses` key. From release 1.2.0 onward eac
470
470
  names exactly one key set, and a new number is issued whenever a key set would otherwise be reused.
471
471
 
472
472
  The JSON schema version and package version are independent: this build emits `schema_version` `3`
473
- for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.3`. Version 1
473
+ for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.4`. Version 1
474
474
  and 2 are the exact shapes already published in release 1.2.0 and are never reused: because
475
475
  `nested_context` changes the default document's key set, version 3 names the current full-document
476
476
  key set and version 4 names the compact projection.
@@ -639,7 +639,7 @@ or candidate-file content.
639
639
 
640
640
  ## Not Included
641
641
 
642
- Version 1.3.3 does not provide AI summaries, project-type detection, loading or transport of
642
+ Version 1.3.4 does not provide AI summaries, project-type detection, loading or transport of
643
643
  nested `AGENTS.md` contents (the JSON `nested_context` field reports bounded existence only),
644
644
  Memory retrieval, semantic ranking, ignore-rule parsing, plugins, profiles, caches, databases,
645
645
  network services, MCP, daemons, GUIs, CI/CD, telemetry, or automatic updates.
@@ -652,16 +652,43 @@ Run the complete local check:
652
652
  just check
653
653
  ```
654
654
 
655
+ The shared check also builds a wheel and installs it into a fresh virtual environment. Package
656
+ acceptance runs the installed CLI outside the source checkout, checking deterministic agreement
657
+ between all three formats, linked worktrees, and safe failures. Build and installation run offline
658
+ using the backend cache populated by `uv run --frozen`; the tests use only disposable repositories.
659
+ Git deadline regressions verify that silent, streaming, and stdout-closed child processes are
660
+ terminated and reaped, and that a timeout leaves CLI stdout empty.
661
+
655
662
  The lockfile uses public PyPI artifact URLs; no organization mirror or local Renovate preset
656
663
  is needed. Renovate keeps scheduled, rate-limited updates and manual merges using a public
657
- recommended preset plus the repository's explicit settings. Python 3.12 remains the tested
658
- runtime; widening that range requires testing those interpreters first.
664
+ recommended preset plus the repository's explicit settings. The GitHub quality gate runs on
665
+ Python 3.12.13, 3.13.13 and 3.14.5; the Gitea root-runner gate and release builds use 3.12.13.
666
+ Other interpreter/platform combinations require validation before widening the supported range.
659
667
 
660
668
  Git test fixtures discard inherited `GIT_*` routing/configuration before creating repositories.
661
- Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check`: non-root
662
- runners execute directly; root containers use `runuser` with an existing account named by
663
- `CONTEXT_LOADER_CI_USER` (default `ubuntu`). That account must be able to execute the installed
664
- `uv`, Python and `just`. No `sudo` dependency is required for this CI step.
669
+ Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check`, which installs
670
+ Python 3.12.13 without user-level executable links and keeps its interpreter/cache under
671
+ `$RUNNER_TEMP/context-loader-ci` (or ignored `.ci-runtime/context-loader-ci` locally).
672
+ Non-root runners execute directly; root containers transfer ownership of that runtime and the
673
+ checkout, then use `runuser` with an existing account named by `CONTEXT_LOADER_CI_USER` (default
674
+ `ubuntu`). That account must be able to execute the installed `uv` and `just`; it does not need
675
+ access to `/root` or a root-owned Python/cache. No `sudo` dependency is required for this CI step.
676
+
677
+ ### Performance baseline
678
+
679
+ On Linux with GNU `/usr/bin/time`, measure an explicit installed CLI using an existing empty
680
+ scratch directory:
681
+
682
+ ```bash
683
+ python scripts/benchmark.py --cli /absolute/path/to/project-context --scratch /absolute/empty/scratch
684
+ ```
685
+
686
+ The opt-in benchmark creates only synthetic repositories under that directory and reports median
687
+ elapsed time, peak RSS (KiB) and JSON-compact output bytes over five runs. It checks identical output
688
+ between runs and covers 1,000 AGENTS headings, a 5,000-file directory, and 1,000 untracked files.
689
+ Keep the CLI version, scratch path, interpreter and machine comparable when comparing runs;
690
+ measurements are observations, not timing thresholds in CI. Retain or remove the scratch directory
691
+ through your own temporary-resource workflow after inspection.
665
692
 
666
693
  ## Version maintenance
667
694
 
@@ -687,6 +714,9 @@ For environments that permit direct public reads but share an exhausted proxy qu
687
714
  set the Gitea Actions repository variable `RELEASE_PUBLIC_API_DIRECT=true`. The record
688
715
  step appends only public GitHub API/PyPI hosts to the existing proxy bypass lists. Without
689
716
  this explicit option, the workflow uses its inherited proxy settings.
717
+ Both existing bypass lists and an explicit `*` wildcard are preserved. Public HTTPS GET
718
+ transport failures get at most three attempts within the existing total retry budget;
719
+ API writes stop on transport failure so their outcome can be verified before retrying.
690
720
 
691
721
  Release checks use Python 3.12, Git, and the runner's existing OpenSSL CLI. They compare downloaded
692
722
  PyPI file bytes, metadata and SHA-256, plus the publisher/tag/commit claims in PyPI's HTTPS-served
@@ -8,14 +8,14 @@ Python standard library.
8
8
 
9
9
  ## Open-source quick start
10
10
 
11
- Current stable release: **1.3.3**. Local CLI for coding-agent workflows; renders deterministic Markdown or JSON.
11
+ Current stable release: **1.3.4**. Local CLI for coding-agent workflows; renders deterministic Markdown or JSON.
12
12
 
13
13
  ```bash
14
- uv tool install 'context-loader==1.3.3'
14
+ uv tool install 'context-loader==1.3.4'
15
15
  ```
16
16
 
17
17
  ```bash
18
- pip install 'context-loader==1.3.3'
18
+ pip install 'context-loader==1.3.4'
19
19
  ```
20
20
 
21
21
  ```bash
@@ -28,21 +28,21 @@ project-context --repo /path/to/repo --format json
28
28
 
29
29
  ## Install
30
30
 
31
- Source version: `1.3.3`. Install its matching published release or an exact source commit.
31
+ Source version: `1.3.4`. Install its matching published release or an exact source commit.
32
32
 
33
33
  Install via `uv`:
34
34
 
35
35
  ```bash
36
- uv tool install 'context-loader==1.3.3'
36
+ uv tool install 'context-loader==1.3.4'
37
37
  ```
38
38
 
39
39
  Install via `pip`:
40
40
 
41
41
  ```bash
42
- pip install 'context-loader==1.3.3'
42
+ pip install 'context-loader==1.3.4'
43
43
  ```
44
44
 
45
- For development or source-based installs tracking current repository (`1.3.3`):
45
+ For development or source-based installs tracking current repository (`1.3.4`):
46
46
 
47
47
  ```bash
48
48
  uv tool install git+https://github.com/xuanheng-tech/context-loader.git
@@ -68,7 +68,7 @@ part of either distribution; run them from a checkout of the matching tag.
68
68
 
69
69
  ## Platform and Runtime Requirements
70
70
 
71
- - **Python**: Python 3.12 (`>=3.12,<3.13`). Runtime code uses only the Python standard library with zero runtime dependencies.
71
+ - **Python**: Python 3.12–3.14 (`>=3.12,<3.15`). Runtime code uses only the Python standard library with zero runtime dependencies.
72
72
  - **Git**: Requires the standard `git` CLI at the fixed absolute path `/usr/bin/git`. The
73
73
  executable is never resolved through `PATH`, so an installation elsewhere is not used and
74
74
  every invocation fails with exit `1`. Git runs with a sanitized environment that ignores
@@ -139,7 +139,7 @@ set differs, as described under “Compact model consumption”. The declared co
139
139
  "schema_version": 3,
140
140
  "tool": {
141
141
  "name": "context-loader",
142
- "version": "1.3.3"
142
+ "version": "1.3.4"
143
143
  },
144
144
  "repository": {
145
145
  "requested_path": "/canonical/requested/path",
@@ -259,7 +259,7 @@ although 1.1.0 added the top-level `statuses` key. From release 1.2.0 onward eac
259
259
  names exactly one key set, and a new number is issued whenever a key set would otherwise be reused.
260
260
 
261
261
  The JSON schema version and package version are independent: this build emits `schema_version` `3`
262
- for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.3`. Version 1
262
+ for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.4`. Version 1
263
263
  and 2 are the exact shapes already published in release 1.2.0 and are never reused: because
264
264
  `nested_context` changes the default document's key set, version 3 names the current full-document
265
265
  key set and version 4 names the compact projection.
@@ -428,7 +428,7 @@ or candidate-file content.
428
428
 
429
429
  ## Not Included
430
430
 
431
- Version 1.3.3 does not provide AI summaries, project-type detection, loading or transport of
431
+ Version 1.3.4 does not provide AI summaries, project-type detection, loading or transport of
432
432
  nested `AGENTS.md` contents (the JSON `nested_context` field reports bounded existence only),
433
433
  Memory retrieval, semantic ranking, ignore-rule parsing, plugins, profiles, caches, databases,
434
434
  network services, MCP, daemons, GUIs, CI/CD, telemetry, or automatic updates.
@@ -441,16 +441,43 @@ Run the complete local check:
441
441
  just check
442
442
  ```
443
443
 
444
+ The shared check also builds a wheel and installs it into a fresh virtual environment. Package
445
+ acceptance runs the installed CLI outside the source checkout, checking deterministic agreement
446
+ between all three formats, linked worktrees, and safe failures. Build and installation run offline
447
+ using the backend cache populated by `uv run --frozen`; the tests use only disposable repositories.
448
+ Git deadline regressions verify that silent, streaming, and stdout-closed child processes are
449
+ terminated and reaped, and that a timeout leaves CLI stdout empty.
450
+
444
451
  The lockfile uses public PyPI artifact URLs; no organization mirror or local Renovate preset
445
452
  is needed. Renovate keeps scheduled, rate-limited updates and manual merges using a public
446
- recommended preset plus the repository's explicit settings. Python 3.12 remains the tested
447
- runtime; widening that range requires testing those interpreters first.
453
+ recommended preset plus the repository's explicit settings. The GitHub quality gate runs on
454
+ Python 3.12.13, 3.13.13 and 3.14.5; the Gitea root-runner gate and release builds use 3.12.13.
455
+ Other interpreter/platform combinations require validation before widening the supported range.
448
456
 
449
457
  Git test fixtures discard inherited `GIT_*` routing/configuration before creating repositories.
450
- Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check`: non-root
451
- runners execute directly; root containers use `runuser` with an existing account named by
452
- `CONTEXT_LOADER_CI_USER` (default `ubuntu`). That account must be able to execute the installed
453
- `uv`, Python and `just`. No `sudo` dependency is required for this CI step.
458
+ Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check`, which installs
459
+ Python 3.12.13 without user-level executable links and keeps its interpreter/cache under
460
+ `$RUNNER_TEMP/context-loader-ci` (or ignored `.ci-runtime/context-loader-ci` locally).
461
+ Non-root runners execute directly; root containers transfer ownership of that runtime and the
462
+ checkout, then use `runuser` with an existing account named by `CONTEXT_LOADER_CI_USER` (default
463
+ `ubuntu`). That account must be able to execute the installed `uv` and `just`; it does not need
464
+ access to `/root` or a root-owned Python/cache. No `sudo` dependency is required for this CI step.
465
+
466
+ ### Performance baseline
467
+
468
+ On Linux with GNU `/usr/bin/time`, measure an explicit installed CLI using an existing empty
469
+ scratch directory:
470
+
471
+ ```bash
472
+ python scripts/benchmark.py --cli /absolute/path/to/project-context --scratch /absolute/empty/scratch
473
+ ```
474
+
475
+ The opt-in benchmark creates only synthetic repositories under that directory and reports median
476
+ elapsed time, peak RSS (KiB) and JSON-compact output bytes over five runs. It checks identical output
477
+ between runs and covers 1,000 AGENTS headings, a 5,000-file directory, and 1,000 untracked files.
478
+ Keep the CLI version, scratch path, interpreter and machine comparable when comparing runs;
479
+ measurements are observations, not timing thresholds in CI. Retain or remove the scratch directory
480
+ through your own temporary-resource workflow after inspection.
454
481
 
455
482
  ## Version maintenance
456
483
 
@@ -476,6 +503,9 @@ For environments that permit direct public reads but share an exhausted proxy qu
476
503
  set the Gitea Actions repository variable `RELEASE_PUBLIC_API_DIRECT=true`. The record
477
504
  step appends only public GitHub API/PyPI hosts to the existing proxy bypass lists. Without
478
505
  this explicit option, the workflow uses its inherited proxy settings.
506
+ Both existing bypass lists and an explicit `*` wildcard are preserved. Public HTTPS GET
507
+ transport failures get at most three attempts within the existing total retry budget;
508
+ API writes stop on transport failure so their outcome can be verified before retrying.
479
509
 
480
510
  Release checks use Python 3.12, Git, and the runner's existing OpenSSL CLI. They compare downloaded
481
511
  PyPI file bytes, metadata and SHA-256, plus the publisher/tag/commit claims in PyPI's HTTPS-served
@@ -1,3 +1,3 @@
1
1
  """Project Context Loader."""
2
2
 
3
- __version__ = "1.3.3"
3
+ __version__ = "1.3.4"
@@ -4,10 +4,10 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "context-loader"
7
- version = "1.3.3"
7
+ version = "1.3.4"
8
8
  description = "Render deterministic local Git context for any executor"
9
9
  readme = "README.md"
10
- requires-python = ">=3.12,<3.13"
10
+ requires-python = ">=3.12,<3.15"
11
11
  dependencies = []
12
12
 
13
13
  [project.license]
@@ -4,11 +4,11 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "context-loader"
7
- version = "1.3.3"
7
+ version = "1.3.4"
8
8
  description = "Render deterministic local Git context for any executor"
9
9
  license = { file = "LICENSE" }
10
10
  readme = "README.md"
11
- requires-python = ">=3.12,<3.13"
11
+ requires-python = ">=3.12,<3.15"
12
12
  dependencies = []
13
13
 
14
14
  [project.scripts]
@@ -46,5 +46,5 @@
46
46
  ],
47
47
  "schema_version": 1,
48
48
  "tool_name": "context-loader",
49
- "tool_version": "1.3.3"
49
+ "tool_version": "1.3.4"
50
50
  }
File without changes