throughline-compose 0.3.0__tar.gz → 0.3.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.
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/LICENSE +1 -1
- throughline_compose-0.3.2/MANIFEST.in +5 -0
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/NOTICE +2 -2
- {throughline_compose-0.3.0/src/throughline_compose.egg-info → throughline_compose-0.3.2}/PKG-INFO +8 -8
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/README.md +3 -3
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/pyproject.toml +5 -5
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/__init__.py +2 -2
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/cli.py +2 -2
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/git_resolver.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/resolve.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/resolver.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/sources.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/spi.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose/union.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2/src/throughline_compose.egg-info}/PKG-INFO +8 -8
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose.egg-info/SOURCES.txt +2 -0
- throughline_compose-0.3.2/tests/conftest.py +157 -0
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/tests/test_cli.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/tests/test_reexport.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/tests/test_resolve.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/tests/test_spi.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/tests/test_union.py +1 -1
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/setup.cfg +0 -0
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose.egg-info/dependency_links.txt +0 -0
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose.egg-info/entry_points.txt +0 -0
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose.egg-info/requires.txt +0 -0
- {throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose.egg-info/top_level.txt +0 -0
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright 2026
|
|
189
|
+
Copyright 2026 Henry J Grech-Cini
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# The default sdist file set ships test modules matching test*.py but not the
|
|
2
|
+
# shared conftest that defines their fixtures, so the shipped suite errored at
|
|
3
|
+
# collection (fixture 'consumer_dir' not found). Ship it so the suite runs green
|
|
4
|
+
# from the sdist (SR-0021).
|
|
5
|
+
include tests/conftest.py
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
throughline-compose
|
|
2
|
-
Copyright 2026
|
|
2
|
+
Copyright 2026 Henry J Grech-Cini
|
|
3
3
|
|
|
4
|
-
This product includes software developed by
|
|
4
|
+
This product includes software developed by Dr Henry J Grech-Cini.
|
|
5
5
|
|
|
6
6
|
Licensed under the Apache License, Version 2.0. See the LICENSE file for the
|
|
7
7
|
full terms.
|
{throughline_compose-0.3.0/src/throughline_compose.egg-info → throughline_compose-0.3.2}/PKG-INFO
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: throughline-compose
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Compose one requirements graph from many reusable throughline sources: importer-assigned namespaces, source-native UIDs, and a union checked by throughline's own validator. Ships the tl-compose CLI, a strict superset of tl.
|
|
5
|
-
Author:
|
|
5
|
+
Author-email: Henry J Grech-Cini <henry.grechcini@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/
|
|
8
|
-
Project-URL: Repository, https://github.com/
|
|
9
|
-
Project-URL: Issues, https://github.com/
|
|
7
|
+
Project-URL: Homepage, https://github.com/rhodium-org/throughline-compose
|
|
8
|
+
Project-URL: Repository, https://github.com/rhodium-org/throughline-compose
|
|
9
|
+
Project-URL: Issues, https://github.com/rhodium-org/throughline-compose/issues
|
|
10
10
|
Keywords: requirements,requirements-management,traceability,composition,git-native,idd,intent-driven-development,throughline
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Environment :: Console
|
|
@@ -29,12 +29,12 @@ Dynamic: license-file
|
|
|
29
29
|
# throughline-compose
|
|
30
30
|
|
|
31
31
|
**Compose one requirements graph from many reusable
|
|
32
|
-
[throughline](https://github.com/
|
|
32
|
+
[throughline](https://github.com/rhodium-org/throughline) sources** — a house style
|
|
33
33
|
guide, a platform standard, a regulatory baseline — alongside the requirements you
|
|
34
34
|
write yourself, and work the combined graph as one.
|
|
35
35
|
|
|
36
36
|
This repository is itself a throughline project: its own design is captured as a
|
|
37
|
-
grounded IDD spine of <!-- tl:count.inline type == 'user_requirement' -->
|
|
37
|
+
grounded IDD spine of <!-- tl:count.inline type == 'user_requirement' -->7<!-- tl:end --> user requirements and <!-- tl:count.inline type == 'system_requirement' -->20<!-- tl:end --> system requirements
|
|
38
38
|
under [`vision/`](vision), [`goals/`](goals),
|
|
39
39
|
[`user-requirements/`](user-requirements),
|
|
40
40
|
[`system-requirements/`](system-requirements), and [`non-goals/`](non-goals), and
|
|
@@ -77,7 +77,7 @@ by a pinned git `url` or by a local `path` ([SR-0006](system-requirements/SR-000
|
|
|
77
77
|
# Adopt a published standard by reference, pinned to an edition.
|
|
78
78
|
[[sources]]
|
|
79
79
|
namespace = "asvs"
|
|
80
|
-
url = "https://github.com/
|
|
80
|
+
url = "https://github.com/rhodium-org/throughline-asvs"
|
|
81
81
|
ref = "v4.0.3" # a git tag (normal form), branch, or commit SHA
|
|
82
82
|
|
|
83
83
|
# Develop a source and its consumer side by side.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# throughline-compose
|
|
2
2
|
|
|
3
3
|
**Compose one requirements graph from many reusable
|
|
4
|
-
[throughline](https://github.com/
|
|
4
|
+
[throughline](https://github.com/rhodium-org/throughline) sources** — a house style
|
|
5
5
|
guide, a platform standard, a regulatory baseline — alongside the requirements you
|
|
6
6
|
write yourself, and work the combined graph as one.
|
|
7
7
|
|
|
8
8
|
This repository is itself a throughline project: its own design is captured as a
|
|
9
|
-
grounded IDD spine of <!-- tl:count.inline type == 'user_requirement' -->
|
|
9
|
+
grounded IDD spine of <!-- tl:count.inline type == 'user_requirement' -->7<!-- tl:end --> user requirements and <!-- tl:count.inline type == 'system_requirement' -->20<!-- tl:end --> system requirements
|
|
10
10
|
under [`vision/`](vision), [`goals/`](goals),
|
|
11
11
|
[`user-requirements/`](user-requirements),
|
|
12
12
|
[`system-requirements/`](system-requirements), and [`non-goals/`](non-goals), and
|
|
@@ -49,7 +49,7 @@ by a pinned git `url` or by a local `path` ([SR-0006](system-requirements/SR-000
|
|
|
49
49
|
# Adopt a published standard by reference, pinned to an edition.
|
|
50
50
|
[[sources]]
|
|
51
51
|
namespace = "asvs"
|
|
52
|
-
url = "https://github.com/
|
|
52
|
+
url = "https://github.com/rhodium-org/throughline-asvs"
|
|
53
53
|
ref = "v4.0.3" # a git tag (normal form), branch, or commit SHA
|
|
54
54
|
|
|
55
55
|
# Develop a source and its consumer side by side.
|
|
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "throughline-compose"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.2"
|
|
8
8
|
description = "Compose one requirements graph from many reusable throughline sources: importer-assigned namespaces, source-native UIDs, and a union checked by throughline's own validator. Ships the tl-compose CLI, a strict superset of tl."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
license = "Apache-2.0"
|
|
12
12
|
license-files = ["LICENSE", "NOTICE"]
|
|
13
|
-
authors = [{ name = "
|
|
13
|
+
authors = [{ name = "Henry J Grech-Cini", email = "henry.grechcini@gmail.com" }]
|
|
14
14
|
keywords = [
|
|
15
15
|
"requirements",
|
|
16
16
|
"requirements-management",
|
|
@@ -38,9 +38,9 @@ dependencies = ["throughline>=1.2.2"] # is_external / is_namespace_qualified pu
|
|
|
38
38
|
dev = ["pytest>=8.0"]
|
|
39
39
|
|
|
40
40
|
[project.urls]
|
|
41
|
-
Homepage = "https://github.com/
|
|
42
|
-
Repository = "https://github.com/
|
|
43
|
-
Issues = "https://github.com/
|
|
41
|
+
Homepage = "https://github.com/rhodium-org/throughline-compose"
|
|
42
|
+
Repository = "https://github.com/rhodium-org/throughline-compose"
|
|
43
|
+
Issues = "https://github.com/rhodium-org/throughline-compose/issues"
|
|
44
44
|
|
|
45
45
|
[project.scripts]
|
|
46
46
|
tl-compose = "throughline_compose.cli:main"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2026
|
|
1
|
+
# Copyright (c) 2026 Henry J Grech-Cini
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
"""throughline-compose — compose one requirements graph from many reusable sources.
|
|
4
4
|
|
|
@@ -10,6 +10,6 @@ overrides only the union-aware ones.
|
|
|
10
10
|
"""
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
|
-
__version__ = "0.3.
|
|
13
|
+
__version__ = "0.3.2"
|
|
14
14
|
|
|
15
15
|
__all__ = ["__version__"]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2026
|
|
1
|
+
# Copyright (c) 2026 Henry J Grech-Cini
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
"""The ``tl-compose`` entry point.
|
|
4
4
|
|
|
@@ -540,7 +540,7 @@ binds a namespace to one external graph:
|
|
|
540
540
|
```toml
|
|
541
541
|
[[sources]]
|
|
542
542
|
namespace = "asvs" # the label you reference it by
|
|
543
|
-
url = "https://github.com/
|
|
543
|
+
url = "https://github.com/rhodium-org/throughline-asvs"
|
|
544
544
|
ref = "v5.0.0" # REQUIRED for a url — pins the edition
|
|
545
545
|
```
|
|
546
546
|
|
{throughline_compose-0.3.0 → throughline_compose-0.3.2/src/throughline_compose.egg-info}/PKG-INFO
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: throughline-compose
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Compose one requirements graph from many reusable throughline sources: importer-assigned namespaces, source-native UIDs, and a union checked by throughline's own validator. Ships the tl-compose CLI, a strict superset of tl.
|
|
5
|
-
Author:
|
|
5
|
+
Author-email: Henry J Grech-Cini <henry.grechcini@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/
|
|
8
|
-
Project-URL: Repository, https://github.com/
|
|
9
|
-
Project-URL: Issues, https://github.com/
|
|
7
|
+
Project-URL: Homepage, https://github.com/rhodium-org/throughline-compose
|
|
8
|
+
Project-URL: Repository, https://github.com/rhodium-org/throughline-compose
|
|
9
|
+
Project-URL: Issues, https://github.com/rhodium-org/throughline-compose/issues
|
|
10
10
|
Keywords: requirements,requirements-management,traceability,composition,git-native,idd,intent-driven-development,throughline
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Environment :: Console
|
|
@@ -29,12 +29,12 @@ Dynamic: license-file
|
|
|
29
29
|
# throughline-compose
|
|
30
30
|
|
|
31
31
|
**Compose one requirements graph from many reusable
|
|
32
|
-
[throughline](https://github.com/
|
|
32
|
+
[throughline](https://github.com/rhodium-org/throughline) sources** — a house style
|
|
33
33
|
guide, a platform standard, a regulatory baseline — alongside the requirements you
|
|
34
34
|
write yourself, and work the combined graph as one.
|
|
35
35
|
|
|
36
36
|
This repository is itself a throughline project: its own design is captured as a
|
|
37
|
-
grounded IDD spine of <!-- tl:count.inline type == 'user_requirement' -->
|
|
37
|
+
grounded IDD spine of <!-- tl:count.inline type == 'user_requirement' -->7<!-- tl:end --> user requirements and <!-- tl:count.inline type == 'system_requirement' -->20<!-- tl:end --> system requirements
|
|
38
38
|
under [`vision/`](vision), [`goals/`](goals),
|
|
39
39
|
[`user-requirements/`](user-requirements),
|
|
40
40
|
[`system-requirements/`](system-requirements), and [`non-goals/`](non-goals), and
|
|
@@ -77,7 +77,7 @@ by a pinned git `url` or by a local `path` ([SR-0006](system-requirements/SR-000
|
|
|
77
77
|
# Adopt a published standard by reference, pinned to an edition.
|
|
78
78
|
[[sources]]
|
|
79
79
|
namespace = "asvs"
|
|
80
|
-
url = "https://github.com/
|
|
80
|
+
url = "https://github.com/rhodium-org/throughline-asvs"
|
|
81
81
|
ref = "v4.0.3" # a git tag (normal form), branch, or commit SHA
|
|
82
82
|
|
|
83
83
|
# Develop a source and its consumer side by side.
|
{throughline_compose-0.3.0 → throughline_compose-0.3.2}/src/throughline_compose.egg-info/SOURCES.txt
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
2
3
|
NOTICE
|
|
3
4
|
README.md
|
|
4
5
|
pyproject.toml
|
|
@@ -16,6 +17,7 @@ src/throughline_compose.egg-info/dependency_links.txt
|
|
|
16
17
|
src/throughline_compose.egg-info/entry_points.txt
|
|
17
18
|
src/throughline_compose.egg-info/requires.txt
|
|
18
19
|
src/throughline_compose.egg-info/top_level.txt
|
|
20
|
+
tests/conftest.py
|
|
19
21
|
tests/test_cli.py
|
|
20
22
|
tests/test_reexport.py
|
|
21
23
|
tests/test_resolve.py
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Copyright (c) 2026 Henry J Grech-Cini
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""Materialise the CLI fixtures into a tmp dir.
|
|
4
|
+
|
|
5
|
+
The fixtures are *loadable throughline projects*. They must not live inside the
|
|
6
|
+
throughline-compose repo tree: the loader discovers registers by walking for
|
|
7
|
+
``.register.yml`` files, so an on-disk fixture project would collide with this
|
|
8
|
+
repo's own IDD spine when ``tl-compose check`` runs at the root. Writing them into
|
|
9
|
+
``tmp_path`` keeps the repo tree a single, clean project.
|
|
10
|
+
"""
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
import pytest
|
|
16
|
+
|
|
17
|
+
# path (relative to a project root) -> file body.
|
|
18
|
+
_SOURCE: dict[str, str] = {
|
|
19
|
+
"throughline.toml": """\
|
|
20
|
+
[project]
|
|
21
|
+
name = "toy"
|
|
22
|
+
format_version = 3
|
|
23
|
+
|
|
24
|
+
[grounding]
|
|
25
|
+
root_types = ["intent"]
|
|
26
|
+
delivery_roots = ["intent"]
|
|
27
|
+
ground_link_types = ["derives_from", "implements"]
|
|
28
|
+
|
|
29
|
+
[status]
|
|
30
|
+
values = ["proposed", "draft", "approved", "ratified", "rejected", "suspect", "deleted"]
|
|
31
|
+
|
|
32
|
+
[status.roles]
|
|
33
|
+
initial = "draft"
|
|
34
|
+
ratified = "ratified"
|
|
35
|
+
invalidated = "rejected"
|
|
36
|
+
suspect = "suspect"
|
|
37
|
+
tombstone = "deleted"
|
|
38
|
+
""",
|
|
39
|
+
"intents/.register.yml": "prefix: INT\ndigits: 4\n",
|
|
40
|
+
"user-requirements/.register.yml": "prefix: UR\ndigits: 4\n",
|
|
41
|
+
"system-requirements/.register.yml": "prefix: SR\ndigits: 4\n",
|
|
42
|
+
"intents/INT-0001.yml": """\
|
|
43
|
+
uid: INT-0001
|
|
44
|
+
type: intent
|
|
45
|
+
status: approved
|
|
46
|
+
title: Toy source purpose
|
|
47
|
+
text: The toy source exists to exercise composition end to end.
|
|
48
|
+
normative: false
|
|
49
|
+
""",
|
|
50
|
+
"user-requirements/UR-0001.yml": """\
|
|
51
|
+
uid: UR-0001
|
|
52
|
+
type: user_requirement
|
|
53
|
+
status: approved
|
|
54
|
+
title: A grouping the source offers
|
|
55
|
+
text: The source shall expose a grouping that consumers can build on.
|
|
56
|
+
links:
|
|
57
|
+
- target: INT-0001
|
|
58
|
+
type: derives_from
|
|
59
|
+
attrs:
|
|
60
|
+
priority: must
|
|
61
|
+
origin: human
|
|
62
|
+
""",
|
|
63
|
+
"system-requirements/SR-0001.yml": """\
|
|
64
|
+
uid: SR-0001
|
|
65
|
+
type: system_requirement
|
|
66
|
+
status: approved
|
|
67
|
+
title: A normative clause the source offers
|
|
68
|
+
text: The source shall provide one concrete, testable clause.
|
|
69
|
+
links:
|
|
70
|
+
- target: UR-0001
|
|
71
|
+
type: implements
|
|
72
|
+
attrs:
|
|
73
|
+
priority: must
|
|
74
|
+
source_ref: V1.1.1
|
|
75
|
+
origin: human
|
|
76
|
+
""",
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
_CONSUMER: dict[str, str] = {
|
|
80
|
+
"throughline.toml": """\
|
|
81
|
+
[project]
|
|
82
|
+
name = "consumer"
|
|
83
|
+
format_version = 3
|
|
84
|
+
|
|
85
|
+
[[sources]]
|
|
86
|
+
namespace = "toy"
|
|
87
|
+
path = "../toy-source"
|
|
88
|
+
|
|
89
|
+
[grounding]
|
|
90
|
+
root_types = ["intent"]
|
|
91
|
+
delivery_roots = ["intent"]
|
|
92
|
+
ground_link_types = ["derives_from", "implements"]
|
|
93
|
+
|
|
94
|
+
[links]
|
|
95
|
+
types = ["derives_from", "implements", "relates"]
|
|
96
|
+
|
|
97
|
+
# The consumer's schema governs the whole union, so its link rules must be a
|
|
98
|
+
# superset covering the shapes its sources use internally (here the toy source's
|
|
99
|
+
# `UR derives_from INT`) as well as the consumer's own (`SR derives_from INT`).
|
|
100
|
+
[link_rules]
|
|
101
|
+
implements = { from = ["system_requirement"], to = ["user_requirement"] }
|
|
102
|
+
derives_from = { from = ["system_requirement", "user_requirement"], to = ["intent"] }
|
|
103
|
+
|
|
104
|
+
[status]
|
|
105
|
+
values = ["proposed", "draft", "approved", "ratified", "rejected", "suspect", "deleted"]
|
|
106
|
+
|
|
107
|
+
[status.roles]
|
|
108
|
+
initial = "draft"
|
|
109
|
+
ratified = "ratified"
|
|
110
|
+
invalidated = "rejected"
|
|
111
|
+
suspect = "suspect"
|
|
112
|
+
tombstone = "deleted"
|
|
113
|
+
""",
|
|
114
|
+
"intents/.register.yml": "prefix: INT\ndigits: 4\n",
|
|
115
|
+
"system-requirements/.register.yml": "prefix: SR\ndigits: 4\n",
|
|
116
|
+
"intents/INT-0001.yml": """\
|
|
117
|
+
uid: INT-0001
|
|
118
|
+
type: intent
|
|
119
|
+
status: approved
|
|
120
|
+
title: Consumer purpose
|
|
121
|
+
text: The consumer builds on a composed source.
|
|
122
|
+
normative: false
|
|
123
|
+
""",
|
|
124
|
+
"system-requirements/SR-0001.yml": """\
|
|
125
|
+
uid: SR-0001
|
|
126
|
+
type: system_requirement
|
|
127
|
+
status: approved
|
|
128
|
+
title: Consumer clause building on the source
|
|
129
|
+
text: The consumer shall ground itself while relating to a source clause.
|
|
130
|
+
links:
|
|
131
|
+
- target: INT-0001
|
|
132
|
+
type: derives_from
|
|
133
|
+
- target: toy:SR-0001
|
|
134
|
+
type: relates
|
|
135
|
+
attrs:
|
|
136
|
+
priority: must
|
|
137
|
+
origin: human
|
|
138
|
+
""",
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _write(root: Path, files: dict[str, str]) -> Path:
|
|
143
|
+
for rel, body in files.items():
|
|
144
|
+
dst = root / rel
|
|
145
|
+
dst.parent.mkdir(parents=True, exist_ok=True)
|
|
146
|
+
dst.write_text(body, encoding="utf-8")
|
|
147
|
+
return root
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
@pytest.fixture
|
|
151
|
+
def source_dir(tmp_path: Path) -> Path:
|
|
152
|
+
return _write(tmp_path / "toy-source", _SOURCE)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
@pytest.fixture
|
|
156
|
+
def consumer_dir(tmp_path: Path, source_dir: Path) -> Path:
|
|
157
|
+
return _write(tmp_path / "consumer", _CONSUMER)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2026
|
|
1
|
+
# Copyright (c) 2026 Henry J Grech-Cini
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
"""End-to-end CLI tests over materialised fixtures: the two-tool contract
|
|
4
4
|
(SR-0003, SR-0005) — bare `tl` fails fast, `tl-compose` resolves and passes."""
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2026
|
|
1
|
+
# Copyright (c) 2026 Henry J Grech-Cini
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
"""Resolver tests (SR-0006): local paths, and url sources fetched by pinned ref
|
|
4
4
|
into a cache outside the project tree. A throwaway local git repo stands in for a
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|