Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
abe3551
chore(release): prepare version 0.2.0
amaurigmartins Aug 13, 2026
dc518db
feat(results): stabilize containers and plotting
amaurigmartins Aug 14, 2026
090f1d7
docs(results): document result and plotting migration
amaurigmartins Aug 14, 2026
969ee73
ci(plotting): add manual gl visual gate
amaurigmartins Aug 14, 2026
9850f66
fix(results): close parity and plotting contract gaps
amaurigmartins Aug 14, 2026
7b09b7b
fix(plotting): restore interactive layout and logarithmic ticks
amaurigmartins Aug 14, 2026
aa912b7
fix(plotting): render decade ticks and compact colorbar labels
amaurigmartins Aug 14, 2026
7ae8d82
test(plotting): add native GL inspection gallery
amaurigmartins Aug 14, 2026
3802ea6
fix(plotting): correct limits and preview layout
amaurigmartins Aug 14, 2026
7710b4e
docs(plotbuilder): add recipe extension guide
amaurigmartins Aug 14, 2026
4ffa439
feat(plotting): add selectable SVG export themes
amaurigmartins Aug 14, 2026
18f8abf
docs(plotbuilder): add export and grouping guide
amaurigmartins Aug 14, 2026
1235249
fix(plotting): collapse indistinguishable colorbar ranges
amaurigmartins Aug 14, 2026
021516f
refactor(plotbuilder): restore accessor dispatch grammar
amaurigmartins Aug 14, 2026
6919cc2
docs(plotbuilder): document accessor recipe grammar
amaurigmartins Aug 14, 2026
7f0a640
chore(parametricbuilder): ignore gridspace drafts
amaurigmartins Aug 14, 2026
c07b83b
docs(release): add ranked release audit
amaurigmartins Aug 14, 2026
6c34e5f
docs(conventions): remove calc prefix qualification
amaurigmartins Aug 14, 2026
c7a6b4e
docs(plotbuilder): rename page to PlotBuilder guide
amaurigmartins Aug 14, 2026
8e39191
refactor(plotbuilder): add typed declarative specifications
amaurigmartins Aug 15, 2026
1d9cad0
refactor(plotting): materialize named layouts through dispatch
amaurigmartins Aug 15, 2026
b4feee0
test(plotbuilder): guard declarative renderer architecture
amaurigmartins Aug 15, 2026
6c9f34d
docs(plotbuilder): document accessor and layout architecture
amaurigmartins Aug 15, 2026
347e959
refactor(plotting): make material scale helper internal
amaurigmartins Aug 15, 2026
ab3d303
docs(plotbuilder): add executable recipe walkthrough
amaurigmartins Aug 15, 2026
cc39364
style(formatting): apply sciml formatter output
amaurigmartins Aug 15, 2026
4a23f66
test(engine): allow platform-level monte carlo rounding
amaurigmartins Aug 15, 2026
68d8435
ci(gitlint): allow 140-character commit bodies
amaurigmartins Aug 15, 2026
778f796
feat(results): add ParametricSweep and quantity bindings
amaurigmartins Aug 15, 2026
ed6cca9
fix(plotbuilder): align side docks and compact spec displays
amaurigmartins Aug 15, 2026
1016362
docs(plotbuilder): generate executable recipe guide
amaurigmartins Aug 15, 2026
69fb01c
docs(docstrings): restore extension templates and examples
amaurigmartins Aug 15, 2026
b75dd27
ci(installation): assert Pluto remains optional
amaurigmartins Aug 15, 2026
a9963c5
chore(repo): rip out retired modules
amaurigmartins Aug 15, 2026
d259070
refactor(engine): replace prototype uq and parametric
amaurigmartins Aug 16, 2026
b376d06
refactor(tests): normalize and include
amaurigmartins Aug 16, 2026
d24db63
fix(ci): repair Julia pre compatibility
amaurigmartins Aug 16, 2026
ba7f15f
feat(plotbuilder): add responsive legends and visible limits
amaurigmartins Aug 16, 2026
830762b
test(plotbuilder): cover responsive side docks
amaurigmartins Aug 16, 2026
8b9f24a
docs(plotbuilder): explain responsive side docks
amaurigmartins Aug 16, 2026
a71bdfe
fix(plotbuilder): fix legend margins
amaurigmartins Aug 16, 2026
8c1c1ec
docs(refactor): inventory data model and engine changes
amaurigmartins Aug 16, 2026
25725a6
refactor(core): replace common and utility modules
amaurigmartins Aug 17, 2026
2422e7f
refactor(datamodel): use base-state eager constructors
amaurigmartins Aug 17, 2026
a09fc03
refactor(engine): apply system temperature in compute
amaurigmartins Aug 17, 2026
9dff2e0
refactor(io): harden persistence and pscad export
amaurigmartins Aug 17, 2026
ae641a0
test(refactor): verify numerical and type parity
amaurigmartins Aug 17, 2026
8a79841
docs(refactor): document the materialized model pipeline
amaurigmartins Aug 17, 2026
475d953
feat(datamodel): unslopify pscad export method
amaurigmartins Aug 17, 2026
a70762e
docs(gauntlet): inventory pscad reference corpus
amaurigmartins Aug 17, 2026
459aba4
feat(gauntlet): add validation grammar
amaurigmartins Aug 17, 2026
a43b828
feat(gauntlet): ingest pscad references
amaurigmartins Aug 17, 2026
0af1b96
feat(gauntlet): reconstruct benchmark cases
amaurigmartins Aug 17, 2026
caaee51
test(gauntlet): compare numerical references
amaurigmartins Aug 17, 2026
2381068
perf(gauntlet): track solver regressions
amaurigmartins Aug 17, 2026
d9ae292
docs(gauntlet): add literate validation guide
amaurigmartins Aug 17, 2026
30c68b0
chore(gauntlet): stage immutable corpus artifacts
amaurigmartins Aug 17, 2026
11bba25
refactor(gauntlet): formalize datasource semantics
amaurigmartins Aug 17, 2026
c525fee
feat(benchmarks): the gauntlet
amaurigmartins Aug 17, 2026
2186080
fix(datamodel): preserve insulation permeability
amaurigmartins Aug 21, 2026
1a2860d
feat(importexport): add PSCAD system import
amaurigmartins Aug 21, 2026
af7a060
fix(plotbuilder): preserve responsive layout sizing
amaurigmartins Aug 21, 2026
0c1d747
docs(repo): add package-server usage map
amaurigmartins Aug 21, 2026
68aa342
chore(gauntlet): remove quarantined application
amaurigmartins Aug 21, 2026
cccd16b
feat(gauntlet): add explicit PSCAD validation harness
amaurigmartins Aug 22, 2026
e17bc21
feat(engine): compare line parameters by matrix term
amaurigmartins Aug 22, 2026
11a9f53
feat(gauntlet): persist accepted PSCAD references
amaurigmartins Aug 22, 2026
22b93d3
fix(plotbuilder): restore flexible responsive layouts
amaurigmartins Aug 22, 2026
1ce2dd6
docs(gauntlet): add result inspection guide
amaurigmartins Aug 22, 2026
2ec22f3
feat(gauntlet): dispatch PSCAD benchmarks through formulations
amaurigmartins Aug 23, 2026
9cf659f
feat(plotbuilder): add line-parameter comparison grids
amaurigmartins Aug 23, 2026
c36793f
fix(plotbuilder): contain responsive figure tracks
amaurigmartins Aug 23, 2026
297f9dc
docs(gauntlet): document comparison plot inspection
amaurigmartins Aug 23, 2026
87f300e
chore(docs): include code of conduct
amaurigmartins Aug 23, 2026
abfa45b
feat(gauntlet): add stable numeric references and brace yourselves
amaurigmartins Aug 23, 2026
e405c9f
chore(repo): checkpoint before the storm
amaurigmartins Aug 23, 2026
9999cfb
refactor(core): assign calculation orchestration owners
amaurigmartins Aug 23, 2026
94efd0d
refactor(validation): dispatch all checks through rules
amaurigmartins Aug 23, 2026
e5618d9
refactor(engine): converge analytical compute stages
amaurigmartins Aug 23, 2026
1c262b9
refactor(parametric): restore recursive gridspace semantics
amaurigmartins Aug 23, 2026
197a6dc
refactor(results): unify observables and scientific units
amaurigmartins Aug 24, 2026
05f2db2
refactor(plotbuilder): restore definition-driven recipes
amaurigmartins Aug 24, 2026
5527e82
refactor(io): make format boundaries explicit
amaurigmartins Aug 24, 2026
3ce10b6
test(gauntlet): align snapshots with converged owners
amaurigmartins Aug 24, 2026
25a2d32
docs(refactor): document the converged operation grammar
amaurigmartins Aug 24, 2026
e303561
fix(engine): normalize computation options
amaurigmartins Aug 24, 2026
08ce07f
refactor(parametric): replace keyed configurations with grid points
amaurigmartins Aug 24, 2026
3e7e46e
refactor(parametric): restore eager builder boundaries
amaurigmartins Aug 24, 2026
1768d4e
test(parametric): enforce gridspace realization contracts
amaurigmartins Aug 24, 2026
8d4ef8e
docs(parametric): document the reconciled gridspace grammar
amaurigmartins Aug 24, 2026
9658f0b
chore(repo): unslopify
amaurigmartins Aug 24, 2026
8fc70e0
refactor(units): establish the quantity and unit authority
amaurigmartins Aug 24, 2026
b713274
refactor(results): establish native observation and publication
amaurigmartins Aug 24, 2026
8a95a79
refactor(uq): consume native observations and own statistical products
amaurigmartins Aug 24, 2026
9437b54
refactor(plot): consume published observations
amaurigmartins Aug 24, 2026
fdcca6e
refactor(report): centralize tables and report exports
amaurigmartins Aug 24, 2026
f03c9b7
refactor(api): remove duplicate result presentation paths
amaurigmartins Aug 24, 2026
ea24591
fix(docs): plug back the removed entries in tutorial1.jl
amaurigmartins Aug 25, 2026
2653ca2
refactor(results): standardize the pul basis
amaurigmartins Aug 25, 2026
7552175
refactor(results): retain typed computation details
amaurigmartins Aug 25, 2026
ac02922
refactor(plot): remove residual quantity symbol grammars
amaurigmartins Aug 25, 2026
d6135cd
refactor(report): complete the xlsx report pipeline
amaurigmartins Aug 25, 2026
440e6d1
refactor(api): finalize result presentation convergence
amaurigmartins Aug 25, 2026
0a90d5a
refactor(units): rename quantity identity type
amaurigmartins Aug 25, 2026
f20bb3f
refactor(api): expose selector-first quantity metadata
amaurigmartins Aug 25, 2026
333fc3a
refactor(report): move xlsx writer to package extension
amaurigmartins Aug 25, 2026
fb64905
refactor(api): add symbol selector facades
amaurigmartins Aug 25, 2026
b1b192c
refactor(uq): fix montecarlo ownership leak
amaurigmartins Aug 25, 2026
0f7606f
test(plotbuilder): lock presentation behavior
amaurigmartins Aug 25, 2026
b48936a
refactor(plotbuilder): isolate the standard makie shell
amaurigmartins Aug 25, 2026
2c4536a
refactor(plotbuilder): add the native canvas path
amaurigmartins Aug 25, 2026
9affab8
refactor(preview): draw geometry through the standard shell
amaurigmartins Aug 25, 2026
b02c00e
refactor(plot): draw line results through the standard shell
amaurigmartins Aug 25, 2026
1f12f8a
refactor(uq): draw monte carlo results through the standard shell
amaurigmartins Aug 25, 2026
26fc699
refactor(plotbuilder): remove the graphics compiler
amaurigmartins Aug 26, 2026
cfd5625
chore(grammar): Adjust gridpoint capitalization
amaurigmartins Aug 26, 2026
6c0fcf4
refactor(grammar): define core results and result spaces
amaurigmartins Aug 26, 2026
5306890
refactor(results): adopt julia collection semantics
amaurigmartins Aug 26, 2026
fe488dc
feat(parametricbuilder): add result-space projection
amaurigmartins Aug 26, 2026
e1db22b
refactor(compute): reconcile traversal and uq products
amaurigmartins Aug 26, 2026
3cdda04
refactor(grammar): centralize result publication policy
amaurigmartins Aug 26, 2026
3fa1c8c
refactor(reportbuilder): enforce definition and dataframe contracts
amaurigmartins Aug 26, 2026
a6da78b
refactor(reportbuilder): complete the xlsx boundary
amaurigmartins Aug 26, 2026
e4ac84b
refactor(boundaries): reconcile plot shell and module ownership
amaurigmartins Aug 26, 2026
608111b
feat(observables): add Monte Carlo result requests
amaurigmartins Aug 26, 2026
f8af208
refactor(observables): route line plots through requests
amaurigmartins Aug 26, 2026
fda243c
feat(plotting): add native Monte Carlo verbs
amaurigmartins Aug 26, 2026
67aaeca
refactor(uq): remove Monte Carlo carrier types
amaurigmartins Aug 26, 2026
f4bfce1
refactor(reporting): consume observable publications
amaurigmartins Aug 26, 2026
36bee35
refactor(plotting): open preview and shell extension seams
amaurigmartins Aug 26, 2026
4040018
fix(plotbuilder): remove ancient debris
amaurigmartins Aug 27, 2026
8fa81cf
feat(gauntlet): add uq benchmarks
amaurigmartins Aug 27, 2026
39a7151
refactor(core): the calm before the storm
amaurigmartins Aug 27, 2026
36dfe57
fix(plots): fix bug in the pow10 formatter
amaurigmartins Aug 27, 2026
30c2d58
test(datamodel): lock v1 engine preservation payload
amaurigmartins Aug 27, 2026
8a3f082
feat(materials): add physical class to grid materialization
amaurigmartins Aug 27, 2026
1de71c5
feat(datamodel): add primitive and resolved geometry
amaurigmartins Aug 27, 2026
95baeeb
refactor(datamodel): complete v1 physical model cutover
amaurigmartins Aug 28, 2026
4367ffd
refactor(engine): rename typo in trifoil
amaurigmartins Aug 28, 2026
f6ce4ad
refactor(datamodel): introduce new type hierarchy
amaurigmartins Aug 28, 2026
eea78ff
refactor(datamodel): implement public api
amaurigmartins Aug 28, 2026
27e6ad7
feat(datamodel): @MohamedNumair make sector shaped great again
amaurigmartins Aug 28, 2026
0249dd6
Merge branch 'main' into release/v0.2.0
amaurigmartins Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .JuliaFormatter.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
style = "sciml"
ignore = [
"@INPROGRESS",
"bibliography",
"designs",
"papers",
"src/parametricbuilder/gridspace",
"temp",
"test/gauntlet/local.jl",
]
17 changes: 17 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
coverage:
precision: 2
round: down
range: "95...100"
status:
project:
default:
target: 95%
threshold: 0%
patch:
default:
target: 95%
threshold: 0%

comment:
layout: "reach,diff,flags,files"
require_changes: true
146 changes: 0 additions & 146 deletions .github/ISSUE_TEMPLATE/release_approval.yml

This file was deleted.

49 changes: 49 additions & 0 deletions .github/OSS_PUBLISH_CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
### Repository name

{{ repository_name }}

### Version tag

{{ version_tag }}

### Intellectual property and legal checks

- [ ] Obtain written approval from the faculty adviser or principal investigator.
- [ ] Submit the required software disclosure to the technology-transfer office.
- [ ] Review funding and sponsorship agreements for release restrictions.
- [ ] Obtain written consent from contributors whose work is included.
- [ ] Check active and pending patent applications before release.
- [ ] Remove personal, confidential, and export-controlled data.
- [ ] Record third-party licences and verify redistribution terms.
- [ ] Confirm that releasing the software does not violate publication embargoes.

### Source and test checks

- [ ] Remove credentials, passwords, API keys, private URLs, and debug code.
- [ ] Install and test the package in a clean environment.
- [ ] Include the scripts and data required to reproduce published results.
- [ ] Record language, package, compiler, and external-program dependencies.
- [ ] Test the public calculations used in examples and publications.
- [ ] Review the source for readable names, error messages, and public APIs.

### Documentation checks

- [ ] State the package purpose, installation, and first calculation in `README.md`.
- [ ] Maintain `CHANGELOG.md` using Keep a Changelog.
- [ ] Provide citation metadata, DOI links, and publication references.
- [ ] Place the selected licence at the repository root.
- [ ] Name funding bodies, institutional support, and contributors.
- [ ] Document the contribution procedure.

### Publication checks

- [ ] Verify that source, examples, documentation, and tests use their documented paths.
- [ ] Repeat installation and documented examples from a clean checkout.
- [ ] Create the version tag and release notes.
- [ ] Complete the hosting service's public-release checks.
- [ ] Prepare the release announcement.
- [ ] Archive the release with a DOI, or record why no DOI is required.

### Institutional email

{{ institutional_email }}
165 changes: 165 additions & 0 deletions .github/scripts/package_gauntlet.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
#!/usr/bin/env python3
"""Validate a collection release against Git tags and package staged benchmarks."""

from __future__ import annotations

import argparse
import re
import subprocess
import sys
from pathlib import Path


COLLECTION_PATTERN = re.compile(r"^[a-z][a-z0-9_]*$")
VERSION_PATTERN = re.compile(r"^(\d+)\.(\d+)\.(\d+)$")


def run_git(repository: Path, *arguments: str) -> str:
result = subprocess.run(
("git", *arguments),
cwd=repository,
check=True,
capture_output=True,
text=True,
)
return result.stdout.strip()


def parse_version(value: str) -> tuple[int, int, int]:
match = VERSION_PATTERN.fullmatch(value)
if match is None:
raise argparse.ArgumentTypeError("version must have the form MAJOR.MINOR.PATCH")
return tuple(int(part) for part in match.groups())


def format_version(version: tuple[int, int, int]) -> str:
return ".".join(str(part) for part in version)


def released_versions(repository: Path, collection: str) -> list[tuple[int, int, int]]:
prefix = f"gauntlet-{collection}-v"
tags = run_git(repository, "tag", "--list", f"{prefix}*").splitlines()
versions: list[tuple[int, int, int]] = []
for tag in tags:
suffix = tag.removeprefix(prefix)
match = VERSION_PATTERN.fullmatch(suffix)
if match is not None:
versions.append(tuple(int(part) for part in match.groups()))
return sorted(set(versions))


def allowed_successors(version: tuple[int, int, int]) -> set[tuple[int, int, int]]:
major, minor, patch = version
return {
(major, minor, patch + 1),
(major, minor + 1, 0),
(major + 1, 0, 0),
}


def validate_target(
target: tuple[int, int, int],
prior: list[tuple[int, int, int]],
) -> tuple[int, int, int] | None:
if not prior:
if target != (1, 0, 0):
raise ValueError("the first release of a collection must be 1.0.0")
return None
latest = prior[-1]
if target not in allowed_successors(latest):
allowed = ", ".join(
format_version(version) for version in sorted(allowed_successors(latest))
)
raise ValueError(
f"{format_version(target)} is not a direct successor of "
f"{format_version(latest)}; expected one of: {allowed}"
)
return latest


def arguments() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description=(
"Package one staged Gauntlet collection after validating its explicit "
"version against collection-specific Git tags."
)
)
parser.add_argument("--collection", required=True)
parser.add_argument("--version", required=True, type=parse_version)
parser.add_argument("--reason", required=True)
parser.add_argument("--julia", default="julia", help="Julia executable")
parser.add_argument(
"--force",
action="store_true",
help="replace an existing local package for this exact version",
)
parser.add_argument(
"--create-tag",
action="store_true",
help="create the validated annotated Git tag after packaging",
)
return parser.parse_args()


def main() -> int:
options = arguments()
repository = Path(__file__).resolve().parents[2]
collection = options.collection
if COLLECTION_PATTERN.fullmatch(collection) is None:
raise ValueError(
"collection must use lowercase letters, digits, and underscores"
)
reason = options.reason.strip()
if not reason:
raise ValueError("release reason cannot be empty")
dirty = run_git(repository, "status", "--porcelain")
if dirty:
raise RuntimeError(
"the worktree is dirty; commit the definitive benchmark sources before "
"packaging"
)
versions = released_versions(repository, collection)
latest = validate_target(options.version, versions)
version = format_version(options.version)
commit = run_git(repository, "rev-parse", "HEAD")
tag = f"gauntlet-{collection}-v{version}"
command = [
options.julia,
"--project=test/gauntlet",
"--startup-file=no",
"test/gauntlet/package.jl",
collection,
version,
reason,
commit,
str(options.force).lower(),
]
print(
f"Packaging {collection} {version}; previous release: "
f"{format_version(latest) if latest is not None else 'none'}",
flush=True,
)
subprocess.run(command, cwd=repository, check=True)
if options.create_tag:
run_git(
repository,
"tag",
"--annotate",
tag,
commit,
"--message",
f"Gauntlet {collection} {version}: {reason}",
)
print(f"Created local annotated tag {tag}")
else:
print(f"Validated release tag: {tag}")
print("No Git tag was created; pass --create-tag when that is intended.")
return 0


if __name__ == "__main__":
try:
sys.exit(main())
except (OSError, subprocess.CalledProcessError, RuntimeError, ValueError) as error:
print(f"error: {error}", file=sys.stderr)
sys.exit(2)
Loading
Loading