Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions docs/user-guide/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,9 @@ raise `ValueError` before feature execution.
### Calendar and bar grid

The calendar-aware default targets the next minor version (0.2), separate from the 0.1.7 patch.
Development and qualification currently pin the merged Specs v2 implementation at
`701bde68744035050ede386efce498234c661c21`. The same immutable Git dependency is declared
in built package metadata; published Specs 0.1.5 does not provide this API. Before a PyPI
release, replace that source dependency with the verified published Specs version containing
the v2 contract and repeat installed-package qualification.
The shared temporal contract requires published `ml4t-specs>=0.2.0,<0.3.0`, also declared
in built package metadata. Specs 0.1.5 does not provide this API. Engineer's development
branch uses the published dependency; the temporal migration is not part of the 0.1.7 patch.

Calendar selection
uses the explicit `calendar` argument, then declared feed metadata, then NYSE. Explicit
Expand Down
6 changes: 1 addition & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ build-backend = "hatchling.build"
[tool.hatch.version]
source = "vcs"

[tool.hatch.metadata]
# Qualification pin until the shared time-contract v2 API is published on PyPI.
allow-direct-references = true

[tool.hatch.build.targets.wheel]
packages = ["src/ml4t"]
namespaces = true
Expand Down Expand Up @@ -76,7 +72,7 @@ requires-python = ">=3.12,<3.15"

# Core dependencies
dependencies = [
"ml4t-specs @ git+https://github.com/ml4t/specs.git@701bde68744035050ede386efce498234c661c21",
"ml4t-specs>=0.2.0,<0.3.0",

# Data processing (Polars-first)
"polars>=0.20.0",
Expand Down
17 changes: 5 additions & 12 deletions tests/test_release_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ def test_ci_audits_core_and_complete_locked_environments() -> None:
assert "complete.txt" in audit


def test_core_dependency_uses_bounded_specs_or_immutable_source_for_qualification() -> None:
def test_core_dependency_requires_published_time_contract_v2() -> None:
project = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
lock = tomllib.loads((ROOT / "uv.lock").read_text(encoding="utf-8"))

Expand All @@ -252,17 +252,10 @@ def test_core_dependency_uses_bounded_specs_or_immutable_source_for_qualificatio
if Requirement(value).name == "ml4t-specs"
)
specs = next(package for package in lock["package"] if package["name"] == "ml4t-specs")
if requirement.url is None:
assert str(requirement.specifier) == "<0.2.0,>=0.1.0"
assert specs["version"] in requirement.specifier
else:
assert re.fullmatch(
r"git\+https://github.com/ml4t/specs\.git@[0-9a-f]{40}", requirement.url
)
commit = requirement.url.rsplit("@", maxsplit=1)[1]
assert specs["source"] == {
"git": f"https://github.com/ml4t/specs.git?rev={commit}#{commit}"
}
assert requirement.url is None
assert str(requirement.specifier) == "<0.3.0,>=0.2.0"
assert specs["version"] in requirement.specifier
assert specs["source"] == {"registry": "https://pypi.org/simple"}


def test_package_supports_python_312_through_314() -> None:
Expand Down
10 changes: 7 additions & 3 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading