Changelog¶
All notable changes to MineProductivity are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Note: The software version (currently
2.0.0) is independent of the architecture document version (v1.0, locked). The architecture is considered final for this phase; the software implementing it continues to evolve incrementally.
[Unreleased]¶
Added¶
- Learning Suite — Fundamentals (v1.0). A first-principles educational path
for new users: ten lessons (
examples/fundamentals/) and ten tutorials (docs/tutorials/fundamentals/) that teach the platform in the order the architecture is layered —core→ontology→events→kpis→analytics→decision→digital_twin→visualization— using real mining problems (haul trucks, shovels, ROM stockpiles, shifts, OEE). Every lesson is a runnable,mypy --strict/ruff-clean script; every tutorial follows a fixed eleven-section format with real, executed output. The suite's plan and governance live indocs/learning/LEARNING_ROADMAP.md; release notes indocs/releases/LEARNING_SUITE_v1.0.md. Documentation only — no production code changed.
[2.0.0] - 2026-07-12¶
Enterprise certification milestone — architecture complete and locked.
2.0.0 is a stability declaration, not a feature release, and it contains
zero breaking changes. Every package in the locked architecture
(core → ontology → events → kpis → analytics → decision → digital_twin →
simulation → optimization → agents → visualization, plus the cross-cutting
registry/plugins/connectors) is implemented, released, documented, and
exercised by examples and benchmarks. The public APIs are now stable by
contract: they will not change incompatibly without a further MAJOR bump.
From here, new value ships as plugins (solver adapters, reasoning backends,
renderers, connector adapters) and applications, evaluated against the locked
specifications — not as changes to the locked packages.
Added¶
docs/certification/2.0-certification.md— the repository-wide certification record: every package's acceptance-proof status, the full quality-gate outputs (2,986 tests,ruff,mypy --strict, coverage), and the production-readiness and repository-consistency audit results.docs/governance/ENGINEERING_RULES.md— the durable, tool-neutral engineering rules (architecture stability, version single-source, Concept-DOI citation, the End-of-Phase Standard, code-as-source-of-truth), migrated from the former repository-specific assistant instructions and referenced fromCONTRIBUTING.md.docs/adr/ADR-0013-Placeholder-Package-Rationalization.md— a proposed (not enacted) post-2.0 plan for the nine skeleton placeholder packages; they are retained and honestly documented for 2.0, their fate deferred to a separate governance review.
Changed¶
- Repository made fully tool-neutral: removed the assistant-specific
CLAUDE.md(its durable rules migrated todocs/governance/ENGINEERING_RULES.md) and the internaldocs/HANDOFF_TO_OPUS.mdsprint handoff. - Public-facing metadata corrected to reflect production maturity:
pyproject.tomlDevelopment Statusis now5 - Production/Stable(was2 - Pre-Alpha), author attribution matchesCITATION.cff, and anOperating System :: OS Independentclassifier was added;SECURITY.mdrewritten from its skeleton-era "no business logic" text to an accurate supported-versions and scope policy;.github/CODEOWNERSextended to cover every domain package; the base-install smoke test now verifies all 14 implemented subpackages import cleanly. - Repository-wide documentation synchronized to the true, verified state
(README, ROADMAP, architecture handbook, implementation checklists, package
READMEs) and the version advanced to
2.0.0across the single-source__version__and the hand-synced citation files (Concept DOI unchanged).
Notes¶
- No production code behavior changed in this release; it is release
engineering, documentation truth-restoration, and certification only. The
1.9.0/1.10.0/1.11.0milestones below delivered the optimization, agents, and visualization implementations that this release certifies. - Full gate green at certification: 2,986 tests passed;
ruff check+ruff format --checkclean;mypy --strictclean across 314 source files;check_docs.pyreports 0 broken links and 0 failed snippets; smoke and perf checks pass.
[1.11.0] - 2026-07-12¶
Visualization implementation milestone — the platform's architecture is now complete.
This release delivers the full production implementation of the
mineproductivity.visualization package against the architecture
approved in the v1.4.0 milestone (Design Specification, Implementation
Checklist, and ADR-0012) — the platform's presentation layer and the
final package in its architecture, built directly on agents. No
package sits above it; with this release every package in the locked
dependency chain core → … → agents → visualization is implemented and
released. The complete design spec §6 module list ships in one
implementation phase; the package's source and unit suite were authored
in the preceding architecture-completion sprint, and this milestone
completes the deferred release engineering.
Added¶
Visualization/Renderer— interface-only extension points with zero concrete subclasses by design (ADR-0012); choosing a charting, templating, or document-generation backend is exactly the implementation decision this package's charter excludes (§3.1, §4).VisualizationMetadata/VisualizationCategory(closed eight-member enum: four general-purpose shapes — chart, graph, KPI card, timeline — and four domain-specific views — simulation playback, digital-twin view, optimization comparison, agent explanation) andVisualizationContext, carrying every lower layer's already-structured output read, never re-derived (§3.2, §8, §26).PresentationModel— the backend-independent structured presentation aVisualizationproduces, carrying no rendered bytes (§9).Dashboard— the series' only lifecycle-freecore.BaseEntity[str](nostatus, nowith_state(), deliberately — a dashboard is edited, not run to completion);Widget,Layout,Theme(§10).DashboardBuilder/ReportBuilder— the series' first concretecore.BaseBuildersubclasses;ReportBuildercomposes the pipeline once per section rather than duplicating its dispatch (§14).RenderingPipeline— the single rendering code path for both live and exported output (proven by a round-trip test): visualization dispatch →PresentationModel→ renderer dispatch →RenderedOutput, with the "qualify, don't coerce" rule (incomplete evidence → warning, never a raise) enforced end to end (§11, §30, §33).Report/ExportRequest/ExportResult— an export is an ordinarypipeline.rendercall wrapped in a result, never a second renderer (§18–§19).by_owner/by_themediscovery;DashboardRepositoryas a literaltypealias overcore.BaseRepository[Dashboard, str]; dual registriesREGISTRY(visualization types) +RENDERERS(renderer types) withregister/register_renderer; and the full exception hierarchy.examples/visualization/— five runnable,mypy --strict/ruff-clean example scripts per the implementation checklist: a single widget render (with the qualify-don't-coerce path), the design spec §15 multi-source dashboard, an exported report proving one rendering code path, a simulation-playback view, and a third-party visualization+renderer plugin discovered via entry points.benchmark/scenarios/visualization/andbenchmark/reports/visualization/— the implementation checklist's two recorded benchmarks:DashboardRepository.get()/list()latency (get ~0.10 µs, flat across 10³–10⁵ dashboards — the O(1) proof) and multi-widget render throughput (~200k–248k sequential renders/s, with the contention-free-parallelism correctness result recorded honestly against the GIL).
Notes¶
- 100% statement coverage across all 16
visualizationmodules (99% including branch coverage); full repository test suite (2986 tests),ruff, andmypy --strictpass with zero findings. - The design spec §35 package acceptance proofs (no-fact-recomputation, immutability, interface-purity, dependency-direction both ways, single-rendering-code-path, and no-backend-coupling) are each independently verified by dedicated tests.
- No architectural changes relative to the locked
v1.4.0design — this is a pure implementation-and-release milestone, and the last package milestone before the certifiedv2.0.0release.
[1.10.0] - 2026-07-12¶
AI Agents implementation milestone.
This release delivers the full production implementation of the
mineproductivity.agents package against the architecture approved in
the v1.3.0 milestone (Design Specification, Implementation Checklist,
and ADR-0011) — the platform's model-independent agent-orchestration
layer, built directly on optimization. The complete design spec §6
module list ships in one implementation phase. The package's source and
unit suite were authored in the preceding architecture-completion
sprint; this milestone completes the deferred release engineering —
examples, benchmarks, documentation synchronization, and version review.
Added¶
Agent/Tool/AgentMemory— interface-only extension points with zero concrete subclasses by design (ADR-0011); choosing a reasoning backend, a tool integration, or a memory store is exactly the implementation decision this package's charter excludes (§3.1, §4).AgentMetadata/AgentCategory(closed enum),AgentContext, and theAgentResultenvelope — reusingdecision.Explanationdirectly as its evidence-linked justification, and carryingToolInvocationrecords (§20).Task/TaskStatus— acore.BaseEntity[str]with theAwaitingApprovalstate;TaskStateopen attributes;TaskExecutorrunning the policy gate → dispatch → retry (perconnectors.RetryPolicy) → persist → audit sequence, plusresume()applying an already-resolvedApprovalRequest(Approved → Running-and-dispatch; Rejected → Failed-with-audited-warning) — the executor never constructs or resolves an approval request itself (§12, §16).PolicyEngine/AgentPolicy/PolicyStatus— versioned policy governance with a mechanically-proven three-outcome contract (proceed / route-to-approval /PermissionDeniedError);AgentCapabilitySet/Permissioncapability governance (§10).WorkflowEngine— goal decomposition (decompose/run) into one task per named agent code, the delegation chain carried in open state attributes, composingsimulation.ExperimentRunnerandoptimization.OptimizationExecutor/PlanComparatordirectly in the concrete agent, never in the orchestrator (§13, §19).AgentAuditTrail/AgentAuditEntrymirroringdecision.DecisionAuditTrail;ApprovalRequest/ApprovalStatus;AgentMessage/DelegationRequest;ConversationContext/ConversationTurn;Goal;by_category/by_scopediscovery;TaskRepositoryas a literaltypealias overcore.BaseRepository[Task, str]; dual registriesREGISTRY(agent types) +TOOLS(tool types) withregister/register_tool; and the full exception hierarchy.agentsis the only domain package that importsconnectors(for theRetryPolicyvalue object only, per spec 11 §12) — mechanically enforced, with no other cross-layer coupling.examples/agents/— five runnable,mypy --strict/ruff-clean example scripts per the implementation checklist: a single agent task, a policy-gated approval (with the denying hard-stop branch), the design spec §19 multi-agent workflow, a planning agent composingsimulationandoptimization, and a third-party agent+tool plugin discovered via entry points.benchmark/scenarios/agents/andbenchmark/reports/agents/— the implementation checklist's two recorded benchmarks:TaskRepository.get()/list()latency (get ~0.08 µs, flat across 10³–10⁵ tasks — the O(1) proof) and task-dispatch throughput (~36k–41k sequential dispatches/s, with the contention-free-parallelism correctness result recorded honestly against the GIL and the audit-trail serialization point).
Notes¶
- 100% statement coverage across all 21
agentsmodules (99% including branch coverage); full repository test suite (2986 tests),ruff, andmypy --strictpass with zero findings. - The design spec §35 package acceptance proofs (no-fact-recomputation, immutability, interface-purity, dependency-direction both ways, policy-before-dispatch, and no-reasoning-backend-coupling) are each independently verified by dedicated tests.
- No architectural changes relative to the locked
v1.3.0design — this is a pure implementation-and-release milestone.TaskExecutor.resume()is an added public method resolving the spec's Approved/Rejected approval transitions, disclosed in the module docstring.
[1.9.0] - 2026-07-12¶
Optimization implementation milestone.
This release delivers the full production implementation of the
mineproductivity.optimization package against the architecture
approved in the v1.2.0 milestone (Design Specification, Implementation
Checklist, and ADR-0010) — the platform's prescriptive search layer,
built directly on simulation. The complete design spec §6 module list
(twenty modules) ships in one implementation phase. The package's source
and unit suite were authored in the preceding architecture-completion
sprint; this milestone completes the release engineering — examples,
benchmarks, documentation synchronization, and version review — that
the sprint deferred.
Added¶
OptimizationModel(ABC, deliberately no shared abstract solve method — each of the six solving paradigms declares its own) andOptimizationContext, carryingKPIResult/AnalyticsResult/DecisionResult/TwinSnapshot/SimulationResultevidence read, never re-derived (§3.2, §8).OptimizationMetadata/OptimizationCategory(closed six-member enum) with import-time namespace/category conformance on every category base (§29).- The full problem-definition family —
Objective/ObjectiveDirection,Constraint/ConstraintOperator,DecisionVariable/VariableDomain, andOptimizationProblem/ProblemStatusas the package's versioned, governed artifact with publish/supersede conflict enforcement (ProblemConflictErrorraised at publication time) (§9, §25). OptimizationRun— acore.BaseEntity[str]subclass followingsimulation.SimulationRun's precedent (identity-based equality inherited unchanged,with_state()producing new instances) — withRunStatus(Completed/Failedterminal) andOptimizationExecutor: category-driven dispatch (never branching on concrete type), an iterative branch for evolutionary models bounded by convergence orparameters["max_iterations"], the §11 LP-continuous-variables and §14 objective-count pairing validation, per-run repository persistence, andFailed-marking on model errors (§10).OptimizationState(open attributes mapping) (§10).- The six interface-only category ABCs with zero concrete subclasses by
design (ADR-0010):
LinearProgrammingModel(_solve_lp),MixedIntegerProgrammingModel(_solve_mip),ConstraintProgrammingModel(_solve_cp),MultiObjectiveModel(_solve_pareto),EvolutionaryMetaheuristicModel(_iterate), andNetworkOptimizationModel(_solve_network) (§11–§16). PlanComparator/SensitivityAnalyzer— thin orchestration layers delegating every statistical judgment toanalytics.describe/distribution/confidence_interval;sweep()produces one re-solve per swept value, each a transient copy of the governed problem, never an in-place edit (§19–§20).by_category/by_scopediscovery factories;OptimizationRunRepositoryas a literaltypealias overcore.BaseRepository[OptimizationRun, str]; theOptimizationResult/ParetoResultfamily;REGISTRY/register; and the full exception hierarchy. No caching module exists, deliberately (§26's documented non-need).examples/optimization/— five runnable,mypy --strict/ruff-clean example scripts per the implementation checklist: a MIP fleet/shift allocation seeded from aTwinSnapshot,PlanComparatorover two candidate plans, aSensitivityAnalyzerconstraint-bound sweep, a candidate-scenario search composed oversimulation.ExperimentRunner, and a third-party solver-adapter plugin discovered via entry points.benchmark/scenarios/optimization/andbenchmark/reports/optimization/— the implementation checklist's two recorded benchmarks:OptimizationRunRepository.get()/list()latency (get ~0.08 µs, flat across 10³–10⁵ runs — the O(1) proof) and sweep re-solve throughput (~27k–37k sequential re-solves/s, with the contention-free-parallelism correctness result recorded honestly against the GIL).
Notes¶
- 100% statement coverage across all 20
optimizationmodules (99% including branch coverage; the residual branches are interface-only ABC method bodies and the documented repository-race guard); full repository test suite (2986 tests),ruff, andmypy --strictpass with zero findings. - The six design spec §35 package acceptance proofs (no-fact-recomputation, no-statistics-reimplementation, immutability, interface-purity, no-architectural-drift, no-solver-coupling) are each independently verified by dedicated tests.
- No architectural changes relative to the locked
v1.2.0design — this is a pure implementation-and-release milestone. Disclosed spec-internal resolutions (iterative termination default, lazyby_categoryresolution) are documented in the relevant module docstrings.
[1.8.0] - 2026-07-08¶
Simulation implementation milestone.
This release delivers the full production implementation of the
mineproductivity.simulation package against the architecture approved
in the v1.1.0 milestone (Design Specification, Implementation
Checklist, and ADR-0009) — the platform's projection layer, built
directly on digital_twin, and the package both decision (spec 07
§19) and digital_twin (spec 08 §14, §34) named by anticipation. The
complete design spec §6 module list (twenty-one modules) ships in one
implementation phase.
Added¶
SimulationModel(ABC, deliberately no shared abstract execution method — each methodology declares its own) andSimulationContext, carryingKPIResult/AnalyticsResult/DecisionResultevidence read, never re-derived.SimulationMetadata/SimulationCategory(closed four-member enum) with import-time namespace/category conformance on every category base.Scenario/ScenarioStatus— the package's versioned, governed configuration artifact, reusingdigital_twin.TwinSnapshotfor real-history starting conditions andevents.AsOffor the scenario hookdecision.WhatIfEnginewas designed around; publish/supersede governance withScenarioConflictErrorraised at publication time.SimulationRun— the series' secondcore.BaseEntity[str]abstraction (identity-based equality inherited unchanged,with_state()producing new instances) — withRunStatus(Completed/Failedterminal) andSimulationExecutor: category-driven dispatch to_trial/_advance/_step(never branching on concrete type), clock-mode conformance validation, snapshot/cached-replay/provisioned seeding, per-step repository persistence, andFailed-marking on model errors.SimulationState(open attributes mapping + simulated time),SimulationClock/TimeProgressionMode(fixed-timestep, next-event, trial-based pacing), andseed_from_replay— a thin wrapper overevents.EventStore.replay, no second replay mechanism.- The four interface-only ABCs with zero concrete subclasses by design
(ADR-0009):
MonteCarloModel(_trial, seed-anchored reproducibility),DiscreteEventModel(_advance),SystemDynamicsModel(_step), andCalibrationModel(_calibrateoverTwinSnapshotground truth; deliberately not aSimulationModelsubclass). Experiment/ExperimentRunner— concurrent trial dispatch with a distinctrandom_seedper trial; zero trials returns an empty experiment, never a raise.ScenarioComparator/SensitivityAnalyzer— thin orchestration layers delegating every statistical judgment toanalytics.describe/distribution/confidence_interval;sweep()produces one run per swept value, ordered to match.by_category/by_scopediscovery factories;SimulationRunRepositoryas a literaltypealias overcore.BaseRepository[SimulationRun, str];SimulationStateCachekeyed by(scenario_code, as_of); theSimulationResult/ExperimentResultfamily;REGISTRY/register; and the full exception hierarchy.examples/simulation/— four runnable,mypy --strict/ruff-clean example scripts per the implementation checklist, including the design spec §17 worked example (a 500-trial Monte Carlo experiment seeded from aTwinSnapshot), also reproduced end-to-end astests/integration/test_simulation_experiment.py.benchmark/scenarios/simulation/andbenchmark/reports/simulation/— the implementation checklist's two recorded benchmarks:SimulationRunRepository.get()/list()latency (get ~0.08 µs, flat across 10³–10⁵ runs — the O(1) proof) andSimulationStateCacheeffectiveness (199/200 hit-rate, 98.8% of experiment wall time saved over a 10⁴-event history).
Notes¶
- 100% statement coverage across all 22
simulationmodules; full repository test suite (2580+ tests),ruff, andmypy --strictpass with zero findings. - The six design spec §35 package acceptance proofs (no-fact-recomputation, no-statistics-reimplementation, immutability, interface-purity, no-architectural-drift, reproducibility) are each independently verified by dedicated tests.
- No architectural changes relative to the locked
v1.1.0design — this is a pure implementation milestone. One disclosed spec-internal imprecision resolved minimally: §22'sby_categoryresolves a run's category through the published-scenario store plus the model registry (the lockedSimulationRunshape carries neither field), documented indiscovery.py's own module docstring.
[1.7.0] - 2026-07-08¶
Digital Twin implementation milestone.
This release delivers the full production implementation of the
mineproductivity.digital_twin package against the architecture
approved in the v1.0.0 milestone (Design Specification,
Implementation Checklist, and ADR-0008) — the platform's stateful
representation layer, built directly on decision, and the first
package in the series whose central abstraction is entity-shaped
(core.BaseEntity[str]) rather than stateless. The complete design
spec §6 module list (fifteen modules) ships in one implementation
phase.
Added¶
Twin(ABC) — a frozencore.BaseEntity[str]subclass by literal inheritance: identity-based equality inherited unchanged,scopefrozen at provisioning time, state changes producing a new instance viawith_state(), never in-place mutation — andTwinContext, carryingKPIResult/AnalyticsResult/DecisionResultevidence read, never re-derived.TwinMetadata/TwinCategory(closed eleven-member enum) and the eleven twin category base classes (MineTwinthroughProductionTwin), each contributing only an import-time namespace/category-conformance check, mirroringkpis' nine category bases.TwinStatus— the instance-level operational lifecycle (Provisioned/Synchronized/Stale/Degraded/Retired);Retiredis terminal and enforced by the synchronizer.TwinState(open, documentedattributesmapping plus its own per-valueschema_version— the third, independent versioning axis) andTwinSnapshot(point-in-time capture reusingevents.AsOf, deliberately distinct fromevents.EventSnapshot).TwinSynchronizer/SyncPolicy— live synchronization viaevents.EventBus.subscribe, cold-start reconstruction viaevents.EventStore.replay(provably convergent with incremental synchronization),Degraded-on-repeated-failure lifecycle handling, and repository-mediated per-id state swaps;TwinStateConflictErrorraised only when a non-conforming repository violates the per-id write-serialization contract.TelemetryReading— the twin-local shape of already-event-sourced sensor readings; deliberately not a second ingestion boundary parallel toconnectors.FMSConnector.TwinSimulationModel— an interface-only ABC with zero concrete subclasses by design (ADR-0008), the twin-state-level half of the bridge whose business-decision-level half isdecision.WhatIfEngine;TwinSimulationResultdefined ahead of any producer.by_category/by_scope— plaincore.PredicateSpecificationdiscovery factories composed withTwinRepository.list().TwinRepository— a literaltypealias overcore.BaseRepository[Twin, str](the strongest reuse in the series); the reference implementation iscore.InMemoryRepository, unchanged, with zero new persistence code.TwinStateCache— evidence-input caching keyed by(twin_id, as_of); never authoritative for current state (deliberately not a reuse ofkpis.ResultCache— recorded "shape fits, coupling doesn't" trade-off).TwinResult/SyncResult/TwinSimulationResultresult family and the full exception hierarchy (TwinValidationError,TwinNotFoundError,TwinSyncError,TwinVersionConflictError,TwinStateConflictError).digital_twin.REGISTRY/register— the Registry Framework specialization, exactly asdecision/analytics/kpisspecialize it; the package itself ships zero registered built-in twin types by design.examples/digital_twin/— four runnable,mypy --strict/ruff-clean example scripts per the implementation checklist: the design spec §15 worked example end-to-end (cold-start + live subscribe), discovery composition, snapshot capture + serialization round-trip, and a third-party entry-point twin type.benchmark/scenarios/digital_twin/andbenchmark/reports/digital_twin/— the implementation checklist's two recorded benchmarks:TwinRepository.get()/list()latency (get ~0.08 µs, flat across 10³–10⁵ twins — the O(1) proof) and cold-start replay cost vs. history length with/withoutTwinSnapshotseeding.
Notes¶
- 100% statement coverage across all 16
digital_twinmodules; full repository test suite (2380+ tests),ruff, andmypy --strictpass with zero findings. - The seven design spec §32 package acceptance proofs (no-fact-recomputation, immutability, interface-purity, no-architectural-drift, replay-consistency, scope-immutability, repository-substitutability) are each independently verified by dedicated tests.
- No architectural changes relative to the locked
v1.0.0design — this is a pure implementation milestone.
[1.6.0] - 2026-07-08¶
Decision Intelligence implementation milestone.
This release delivers the full production implementation of the
mineproductivity.decision package against the architecture approved in
the v0.9.0 milestone (Design Specification, Implementation Checklist,
and ADR-0007) — the platform's prescriptive layer, built directly on
analytics. Delivered across four internal phases (Foundation, Rule
Engine, Analysis Layer, Operational Services), all bundled into this one
release since none of the intermediate phases were independently
tagged.
Added¶
DecisionModel(ABC)/DecisionContext,DecisionMetadata/DecisionCategory, and the fullDecisionResultresult-model hierarchy (Recommendation,RankedRecommendation,ActionPlan,Alert,RootCauseResult,WhatIfResult, plus supporting value objects) (Foundation).DecisionPipeline/PipelineStage/ModelStage,Threshold, anddecision.REGISTRY/register, specializing the Registry Framework mechanism exactly asanalytics._registry/kpis._registrydo (Foundation).Rule/RuleEngine/RuleEngineStage,DecisionStatus/Policy(versioned publish/supersede governance), andDecisionStrategy(ABC)/ThresholdDecisionStrategy— the default, concrete, rule/threshold-driven strategy, self-registering intoREGISTRY(Rule Engine).DecisionScorer/ConfidenceScorer,RankingStrategy(ABC)/WeightedScoreRanking,ExplanationBuilder/ExplanationStage,ActionPrioritizer, and the interface-onlyRootCauseAnalyzerwith zero concrete subclasses by design (Analysis Layer).WhatIfEngine— an interface-only extension point with zero concrete subclasses by design, reusingevents.AsOf's reservedscenariofield (Operational Services).ActionPlanner— dependency-respecting topological action ordering via its own narrow, self-contained implementation (deliberately notkpis.DependencyGraph) (Operational Services).AlertGenerator— produces anAlertfrom aThresholdBreachor a high-severityRecommendation(Operational Services).RealTimeDecisionSession/BatchDecisionRunner— the two execution modes, composingkpis.KPIEngine/analytics.BatchAnalyticsRunnerrather than recomputing anything themselves (Operational Services).DecisionAuditTrail/DecisionAuditEntry— the append-only accountability record every operationally-actionableDecisionPipelinerun can feed (Operational Services).recommendation.py— the design spec §6 generation-logic module, with no public API of its own per §6's own entry for it (ThresholdDecisionStrategydelegatesRecommendationconstruction to it); originally folded intostrategy.py, extracted in this release's completion pass so the package structure matches §6's twenty-two-module list exactly (completion pass).examples/decision/— four runnable,mypy --strict/ruff-clean example scripts per the implementation checklist: the design spec §9 worked example end-to-end over realUTIL.OEE/trend evidence, action prioritization + dependency-respecting planning, aRealTimeDecisionSessionover a liveEventBus, and a third-party-style entry-point plugin strategy (completion pass).benchmark/scenarios/decision/andbenchmark/reports/decision/— the implementation checklist's two recorded benchmarks:RuleEngine.evaluate()throughput (~1.3–1.6 M rules/s, flat across 10–250-rule batches) andDecisionAuditTrailappend/query latency (append ~0.3 µs/entry, flat across 10³–10⁵ entries — the O(1) proof) (completion pass).- Checklist acceptance-proof tests added to the suite: real-time/batch
parity (
RealTimeDecisionSession.latest()vs.BatchDecisionRunnerover the same assembled context),DecisionAuditTrail.query()non-blocking under concurrentrecord()calls, and registered-by-default coverage for the two built-in strategies (completion pass). - Design spec §12's activation gate:
policy.publish_policynow raisesDecisionModelNotFoundErrorwhen aPolicyis published asActivewhile itsstrategy_codenames no registeredDecisionModel— failing at activation time, never silently at first evaluation; aProposedpolicy may still be authored ahead of its strategy's registration (completion pass).
Notes¶
- 100% statement coverage across all 23
decisionmodules; full repository test suite (2160+ tests),ruff, andmypy --strictpass with zero findings. decisionis now feature-complete per the Reference Implementation Blueprint's design spec §6 module list — the only remaining future work is a concreteRootCauseAnalyzer/WhatIfEngineplugin (neither is expected to ship inside this package itself, by design) and whateverdigital_twin/simulation/optimization/agents/visualizationneed from this package as those packages move from architecture-complete to implemented.- No architectural changes relative to the locked
v0.9.0design — this is a pure implementation milestone.
[1.5.0] - 2026-07-07¶
Analytics Engine implementation milestone.
This release delivers the full production implementation of the
mineproductivity.analytics package against the architecture approved in
the v0.8.0 milestone (Design Specification, Implementation Checklist, and
ADR-0006) — the platform's statistical and analytical computation layer,
built directly on kpis.
Added¶
AnalyticsModel(ABC)/AnalyticsContext,AnalyticsMetadata/AnalyticsCategory, and the fullAnalyticsResultresult-model hierarchy (Foundation).AnalyticsPipeline/PipelineStage/ModelStageandAggregationEngine/GroupBySpec(Metric Pipelines & Aggregation), includingAggregationEngine.reduce().describe,percentile,histogram,distribution,confidence_interval(Statistical Primitives), androlling_mean/rolling_std/rolling_apply(Rolling Analytics).TrendModel/LinearTrendModel,BaselineModel/RollingBaselineModel,BenchmarkModel/BandBenchmarkModel— each self-registering into the newanalytics.REGISTRY.DataQualityScorer/MissingDataPolicy/DataQualityStage(Data Quality & Missing Data Handling).ForecastingModel,AnomalyDetector,OutlierDetector— interface-only extension points with zero concrete subclasses by design (ADR-0006).BatchAnalyticsRunner,StreamingAnalyticsSession,IncrementalAccumulator(Execution Modes), the latter implementing Welford's online algorithm for O(1) streaming mean/variance.analytics.REGISTRY/register(_registry.py), specializing the Registry Framework mechanism exactly askpis._registrydoes.
Notes¶
- 100% statement coverage across all 22
analyticsmodules; full repository test suite,ruff, andmypy --strictpass with zero findings. - No architectural changes relative to the locked
v0.8.0design — this is a pure implementation milestone.
[1.4.0] - 2026-07-06¶
Visualization Architecture milestone.
This release completes the architectural design of the Visualization
subsystem — the seventh package built on top of the Foundation Layer and
the final package in the platform's architecture, sitting directly above
the now-locked agents. No production implementation is included; this
release delivers the approved architecture specification, implementation
checklist, and architectural decision record that will guide future
development.
Added¶
- Visualization Design Specification.
- Visualization Implementation Checklist.
- ADR-0012: Visualization Architecture Decision Record.
- Repository-wide version bump to v1.4.0 reflecting the current release.
Notes¶
- This is an architecture milestone only.
- No production Visualization implementation is included.
- Two interface-only ABCs (
Visualization,Renderer) are defined with zero concrete implementations, mirroring the same discipline already applied by every prior Intelligence-tier milestone. - This is the final package in the platform's architecture; no future package is anticipated above it.
[1.3.0] - 2026-07-05¶
AI Agents Architecture milestone.
This release completes the architectural design of the AI Agents
subsystem — the sixth package built on top of the Foundation Layer,
sitting directly above the now-locked optimization. No production
implementation is included; this release delivers the approved
architecture specification, implementation checklist, and architectural
decision record that will guide future development.
Added¶
- AI Agents Design Specification.
- AI Agents Implementation Checklist.
- ADR-0011: AI Agents Architecture Decision Record.
- Repository-wide version bump to v1.3.0 reflecting the current release.
Notes¶
- This is an architecture milestone only.
- No production AI Agents implementation is included.
- Three interface-only ABCs (
Agent,Tool,AgentMemory) are defined with zero concrete implementations, mirroring the same discipline already applied by every prior Intelligence-tier milestone. - Forms the architectural foundation for the future Visualization milestone.
[1.2.0] - 2026-07-05¶
Optimization Architecture milestone.
This release completes the architectural design of the Optimization
subsystem — the fifth package built on top of the Foundation Layer,
sitting directly above the now-locked simulation. No production
implementation is included; this release delivers the approved
architecture specification, implementation checklist, and architectural
decision record that will guide future development.
Added¶
- Optimization Design Specification.
- Optimization Implementation Checklist.
- ADR-0010: Optimization Architecture Decision Record.
- Repository-wide version bump to v1.2.0 reflecting the current release.
Notes¶
- This is an architecture milestone only.
- No production Optimization implementation is included.
- Six interface-only ABCs (
LinearProgrammingModel,MixedIntegerProgrammingModel,ConstraintProgrammingModel,MultiObjectiveModel,EvolutionaryMetaheuristicModel,NetworkOptimizationModel) are defined with zero concrete implementations, mirroring the same discipline already applied by every prior Intelligence-tier milestone. - Forms the architectural foundation for the future AI Agents and Visualization milestones.
[1.1.0] - 2026-07-05¶
Simulation Architecture milestone.
This release completes the architectural design of the Simulation
subsystem — the fourth package built on top of the Foundation Layer,
sitting directly above the now-locked digital_twin. No production
implementation is included; this release delivers the approved
architecture specification, implementation checklist, and architectural
decision record that will guide future development.
Added¶
- Simulation Design Specification.
- Simulation Implementation Checklist.
- ADR-0009: Simulation Architecture Decision Record.
- Repository-wide version bump to v1.1.0 reflecting the current release.
Fixed¶
tests/unit/core/test_public_api.py::TestPackageVersioncomparedmineproductivity.__version__against a hardcoded string literal, requiring an edit on every version bump. Rewritten to compare againstimportlib.metadata.version("mineproductivity")— the installed package's own metadata — so the test remains correct across future releases with no changes required.
Notes¶
- This is an architecture milestone only.
- No production Simulation implementation is included.
- Four interface-only ABCs (
MonteCarloModel,DiscreteEventModel,SystemDynamicsModel,CalibrationModel) are defined with zero concrete implementations, mirroring the same discipline already applied by the Analytics, Decision Intelligence, and Digital Twin milestones. - Forms the architectural foundation for the future Optimization, AI Agents, and Visualization milestones.
[1.0.0] - 2026-07-05¶
Digital Twin Architecture milestone.
This release completes the architectural design of the Digital Twin subsystem. No production implementation is included; this release delivers the approved architecture specification, implementation checklist, and architectural decision record that will guide future development.
Added¶
- Digital Twin Design Specification.
- Digital Twin Implementation Checklist.
- ADR-0008: Digital Twin Architecture Decision Record.
- Repository-wide version bump to v1.0.0 reflecting the current release.
Notes¶
- This is an architecture milestone only.
- No production Digital Twin implementation is included.
- Forms the architectural foundation for the future Simulation, Optimization, AI Agents, and Visualization milestones.
[0.9.0] - 2026-07-04¶
Decision Intelligence Architecture milestone.
This release completes the architectural design of the Decision Intelligence subsystem. No production implementation is included; this release delivers the approved architecture, implementation roadmap, and architectural decision records that will guide future development.
Added¶
- Decision Intelligence Design Specification.
- Decision Intelligence Implementation Checklist.
- ADR-0007: Decision Intelligence Architecture Decision Record.
- Documentation updates reflecting the v0.9.0 architecture milestone.
- README updated with architecture progress, project status, badges, and current release information.
- Citation metadata updated to use the Zenodo Concept DOI.
Fixed¶
- Corrected broken documentation links in ADR-0007.
- Documentation validation passes with zero broken links.
- README and citation information synchronized with the latest architecture milestone.
Notes¶
- This is an architecture milestone only.
- No production Decision Intelligence implementation is included.
- The next planned milestone is v1.0.0 – Digital Twin Architecture.
[0.8.0] - 2026-07-04¶
Analytics Engine Architecture milestone.
This release completes the architectural design of the Analytics Engine. No production implementation is included; this release provides the approved architecture specification, implementation checklist, and ADR defining the Analytics subsystem.
Added¶
- Analytics Engine Design Specification.
- Analytics Engine Implementation Checklist.
- ADR-0006: Analytics Engine Architecture Decision Record.
- Architecture documentation for the Analytics subsystem.
Notes¶
- Architecture milestone only.
- No production Analytics Engine implementation is included.
- Forms the architectural foundation for the Decision Intelligence milestone.
[0.7.4] - 2026-07-03¶
Production Readiness Validation — a first-time-user onboarding audit with
no new functionality. Every installation method, the "verify the install"
snippet, and every runnable example and notebook were followed exactly as
documented, in fresh environments, from a genuinely fresh clone of what is
now the actual published main branch.
Added¶
examples/quickstart/01_five_minute_tour.py: the five-minute tour — one truck (ontology), one shift, two haul cycles, and one KPI (PROD.TPH) read straight off the Standard Library, in ~50 lines.examples/quickstart/was, despite its own README's stated purpose ("mirroringnotebooks/beginner/in code form"), still an empty placeholder even though every subsystem it needs has been implemented since v0.7.0.- A "Next Steps" section in the root
README.md, immediately after the install-verification snippet: a table routing a first-time user to the quickstart script, the beginner notebook, and the right first example for KPIs, ontology, connectors, events, and the registry/ plugin discovery mechanism - none of which the README linked to anywhere before this release, despite all of it existing and being exercised in CI. - Anchor-fragment validation in
scripts/quality/check_docs.py: previously only checked that a link's file resolves, not that its#anchoris an actual heading in the target file. This caught a real bug on first run (see Fixed).
Fixed¶
- The root
README.md's "Architectural Layering & Dependency Direction" section linked todocs/architecture/README.md#dependency-rules, an anchor that has never existed in that file (the closest real heading is#dependencies, a different section entirely). The surrounding sentence was also stale - it read "documented (not yet mechanically enforced)," which stopped being true as of the Ontology milestone (v0.4.0): every implemented package's owntest_public_api.py:: TestNoForbiddenDependencieshas enforced this mechanically ever since. Rewritten to state the (now true) mechanical enforcement and link to a package README section that actually exists (src/mineproductivity/kpis/README.md#dependency-rules).
Notes¶
- All four installation methods (
pip install git+https://...,pip install .from a local checkout,pip install -e ".[dev]", and the wheel built bypython -m build) were re-verified against the actual currentmainbranch (not a stale local copy) in fresh virtual environments, and produced byte-for-byte the output the README documents. - All 21 example scripts across
quickstart/,core/,events/,ontology/,registry/,connectors/, andkpis/, plusnotebooks/beginner/01_first_kpi_lookup.ipynb, were re-executed fresh and pass. docs/developer_guide/(the in-repo home for the locked Developer & Cookbook Guide's three parts) remains an unpopulated placeholder - not fixed in this release. Recreating a multi-part external reference document from scratch is content authorship, not an onboarding- friction fix, and risks drifting from the actual locked source material. The new "Next Steps" section inREADME.mdsays so explicitly rather than leaving a first-time user to discover the gap by clicking through to an empty page.- No architecture, dependency direction, or public API changed. No new packages were added.
[0.7.3] - 2026-07-03¶
CI/CD & Cross-Platform Validation — a release-engineering milestone with no
new functionality. The three placeholder GitHub Actions workflows left over
from the repository-skeleton phase (ci.yml, docs.yml, release.yml,
each literally titled "Placeholder... no implementation yet") are replaced
with a real, enterprise-grade pipeline.
Added¶
.github/workflows/ci.yml: the correctness gate.pytest+ coverage (--cov-fail-under=95) across a{ubuntu, windows, macos} x {3.12, 3.13}matrix (the two Python versionspyproject.tomlactually declares support for), plus Python 3.10/3.11 on Ubuntu as non-blocking early signal. Builds the wheel and sdist,twine check --stricts them, then validates wheel installs across all three OSes and sdist/editable/GitHub installs (at the exact commit under test) in fresh environments, each followed by a real smoke test..github/workflows/quality.yml: the cleanliness gate.ruff check+ruff format --check,mypy --strict, documentation validation (every relative Markdown link in the repository, every fencedpythonblock in the root and package READMEs), and full notebook execution..github/workflows/benchmark.yml: a performance smoke test - generous wall-clock ceilings on cold-import time, a batched KPI compute, and dependency-graph resolution, meant to catch a catastrophic regression, not track performance over time..github/workflows/dependency-review.yml,codeql.yml,security.yml: PR-triggered dependency vulnerability/license review, weekly CodeQL static analysis, and weekly +pyproject.toml-triggeredpip-auditagainst every installed dependency..github/workflows/release.yml: on av*.*.*tag push, builds andtwine checks the wheel/sdist, verifies the tag matchesmineproductivity.__version__(failing the release if they disagree), and creates a GitHub Release with both artifacts attached. Does not publish to PyPI — a fully commented-out Trusted Publishing (OIDC) job is included, ready to enable once a PyPI Trusted Publisher is registered for this repository.scripts/quality/smoke_test.py,check_docs.py,perf_smoke.py: the reusable scripts the workflows above call, each also runnable standalone by a contributor.docs/governance/CI_CD_GUIDE.md: workflows, branch strategy (trunk -based offmain), release flow, developer workflow, and a failure-handling runbook per workflow.- Two new README badges (
CI,Quality) linking to the new workflows' live status. No coverage-percentage badge added — that needs a reporting service (Codecov/Coveralls) this milestone deliberately does not wire up (seedocs/governance/CI_CD_GUIDE.md's Future Work).
Fixed¶
.github/CODEOWNERSonly listedcore,ontology, andevents— missingregistry,plugins,connectors, andkpisentirely, each implemented and released since the file was last touched.scripts/quality/check_docs.py(documentation snippet validation) root-caused a genuinedataclassesgotcha rather than working around it: every source file in this codebase usesfrom __future__ import annotations, so a snippet'sClassVar[str]field annotation is a string at class-definition time, anddataclassesresolves such strings viasys.modules[cls.__module__].__dict__. Executing a snippet with__module__ == "__main__"therefore resolved against the checker script's own globals (which never importClassVar), silently misclassifying everyClassVarfield as a plain field with a default and breaking dataclass field ordering for reasons that had nothing to do with the documentation being checked. Fixed by registering each checked file's namespace as its own uniquely-named fake module insys.modulesfor the duration of the check.
Notes¶
pyproject.toml'seventsextra pinspyarrow>=14,<19, which permits a real, known Use-After-Free (PYSEC-2026-113, fixed inpyarrow>=23.0.1).security.ymlrecords this as a deliberate, documented exception (--ignore-vuln) rather than a silently-ignored finding or a permanently-red gate: fixing it properly means bumping across roughly nine majorpyarrowreleases and re-validatingevents'ArrowEventCodec/ParquetEventCodecagainst the new API - a framework-compatibility change out of scope for CI/CD tooling work. Seedocs/governance/CI_CD_GUIDE.md's Known Exceptions.docs.ymlbuilds withmkdocs build, not--strict:docs/architecture/*.md(the locked design specifications) legitimately cross-link to the rootREADME.mdand to package READMEs undersrc/mineproductivity/, both outside mkdocs' owndocs_dir— correct for GitHub's file browser, unresolvable within a single mkdocs site build, and unrelated to whether the site itself is sound.- No architecture, dependency direction, or public API changed. No new packages were added. PyPI publishing remains intentionally disabled.
[0.7.2] - 2026-07-03¶
Documentation & API Validation - a documentation-and-API-quality audit with
no new functionality. Every README, example, notebook, and documented code
snippet across the repository was executed or cross-checked against the
real, current source; the public API surface of all seven implemented
packages was re-verified for intentional, sorted, gap-free __all__ lists.
Fixed¶
registry.registered_in()'s docstring (and its module docstring) claimedkpis.registerandontology.register_equipmentare "thin, partially-applied" wrappers around it. Neither is:ontologysits belowregistryin the dependency stack and cannot import it at all (its entity-type registry is a separate, internal mechanism that predatesregistry);kpis.registerhand-rolls its own decorator to also raiseKPICircularDependencyErrorat registration time. Onlyconnectors.register_connectoris genuinely built from this function. Corrected in both the docstring andregistry/README.md's matching Extension Guide example, which is rewritten to use the accurateconnectorsexample instead.- Two package-README "recipe" code snippets meant to be copy-paste starting
points (
events/README.md'sBlastEventexample,ontology/README.md'sUndergroundJumboexample) were missing the imports (dataclass,field,ClassVar, and the relevant base classes) a reader would actually need to run them. examples/README.mdstill listed only the unimplemented placeholder example directories (quickstart/,production/,visualization/,ai/,digital_twin/) and said "Dependencies: mineproductivity (once implemented)" — omitting the six implemented, runnable example directories (core/,events/,ontology/,registry/,connectors/,kpis/, 20 scripts total) entirely. Rewritten to list both groups accurately.docs/api/README.mdsaid "Placeholder - no API exists yet to document," no longer true with seven implemented, documented packages; corrected to point at each package's ownREADME.mdwhile automated reference generation remains genuinely not wired up.docs/architecture/README.mddescribed the five now-fully-implemented design specifications as packages that merely "will depend oncore," future tense left over from before any of them existed.tests/unit/kpis/README.mdstill read "Placeholder — no implementation exists yet in the corresponding source package" despite the real, 344-test, 100%-coverage suite the KPI Engine milestone added — the one package README this repository's "update the test README alongside the test suite" convention was missed for. Rewritten to match the pattern already used by the other six implemented packages' test READMEs.
Notes¶
- Every fenced
``python block in the rootREADME.mdand all seven implemented package READMEs was extracted and executed; every runnable example underexamples/(20 scripts) and the one existing notebook (notebooks/beginner/01_first_kpi_lookup.ipynb`) were executed end to end with zero failures. - Zero broken relative links found across all 130 Markdown files in the repository.
- Exception hierarchies,
BaseMetadatasubclassing, andProtocolnaming were reviewed across all seven implemented packages for cross-package consistency; no inconsistency was found serious enough to warrant an API change (none was made — none is in scope for this milestone). - No architecture, dependency direction, or public API changed. No new
packages were added.
docs/architecture/*_Design_Specification.md's own "Design specification only - no implementation" status lines are now stale for the five implemented frameworks but were deliberately left unmodified as locked governance documents, out of scope for this milestone.
[0.7.1] - 2026-07-03¶
Packaging & Installation Validation - a release-engineering milestone with
no new functionality. mineproductivity was built, checked, and installed
from every supported distribution channel: wheel, sdist, pip install -e .,
and pip install git+https://github.com/imanojkumar/MineProductivity.git.
Fixed¶
pyproject.tomldeclared a[project.scripts]console entry point (mineproductivity = "mineproductivity.cli:main") pointing at amain()function that has never existed -mineproductivity.cliis still an unimplemented structural placeholder. Everypip installtherefore shipped a console script that crashed (ImportError: cannot import name 'main' from 'mineproductivity.cli') the moment it was run. The entry point is removed until a real CLI exists; nothing else in[project.scripts]is affected since it was the only entry.
Changed¶
pyproject.tomlgained akeywordsfield (mining,productivity,kpi,digital-twin,ontology,event-sourcing,python), matchingCITATION.cff's existing keyword list - previously absent, hurting PyPI/GitHub topic discoverability.README.md's "Getting Started" section, which still read "There is no functionality to run yet" (a leftover from thev0.1.0skeleton phase), is rewritten with accurate, verified installation instructions (GitHub install, local install, the optional dependency groups table, and a working install-verification snippet) ahead of the existing contributor development-setup instructions.
Notes¶
python -m buildproduces a clean wheel and sdist;twine checkpasses both with no warnings.- The wheel (
py3-none-any, zero third-party dependencies) was installed into a clean virtual environment and exercised: every top-level subpackage (core,events,ontology,registry,connectors,kpis,plugins) imports cleanly with no optional extras installed, and a realPROD.TPHcomputation was run end-to-end againstREGISTRY. - The sdist, a fresh GitHub install (
pip install git+...), andpip install -e .were each independently verified the same way, in their own clean virtual environments;pip install -e ".[analytics]"additionally re-ran eight representative examples (one per implemented package plus all fourexamples/kpis/scripts), all exiting0. - No dependency direction, public API, or architecture changed. No new packages were added.
[0.7.0] - 2026-07-03¶
Added¶
mineproductivity.kpis: the KPI Engine — the platform's most important package, making every performance indicator a discoverable, versioned, self-describing object ("KPI-as-object") rather than a formula buried in a script, implementingdocs/architecture/05_KPI_Engine_Design_Specification.mdexactly.KPIMetadata(the full 29-field governed Standard Library schema),BaseKPI/CompositeKPI(leaf vs. composite, never conflated), nine category base classes (ProductionKPI,UtilizationKPI,MaintenanceKPI,HaulageKPI,DelayKPI,EnergyKPI,QualityKPI,CostKPI,SafetyKPI),KPIEngine(orchestration only - zero metric-specific logic, AD-KP-01),DependencyGraph(topological_order/detect_cycle, cycle detection proven at registration time, never deferred to first execution),aggregation.combine_results(structurally enforcing the RATIO-never-averaged rule),Window/RollingWindow/CumulativeWindow,ResultCache(thread-safe,(code, window, scope, fingerprint)-keyed),specialize()(KPI inheritance, e.g.PROD.TPH.Ore),parse_identifier/KPIIdentifier(theNAMESPACE.Namenaming standard),KPIValidator, andCertificationFixture/run_certification_fixture.- Four pluggable
ExecutionBackendimplementations -PandasBackend(default),NumPyBackend(no DataFrame dependency at all),PolarsBackend, andDuckDBBackend— with mechanically proven backend parity: the same_computeproduces an identicalKPIResult.valueregardless of which backend assembled its rows. - A 12-KPI Standard Library reference implementation:
PROD.TPH,UTIL.PA/UTIL.UA/UTIL.Performance/UTIL.OEE(the last a composite worked example built on the other three),MAINT.MTTR,HAUL.TruckCycleTime,DISP.TotalDelayHours,ENERGY.FuelConsumed,QUAL.OreProportion,COST.FuelPerTonne(a cross-event-type computation overCONSUMPTIONandCYCLErows), andSAFE.SpeedViolationCount. tests/unit/kpis/: a full unit test suite (344 tests, 100% line coverage) mirroringsrc/mineproductivity/kpis/1:1, including backend parity tests, a dedicated regression proof of the Cookbook Part I Ch. 6 ratio-correctness worked numbers (A-shift 1,300 t/h over 12h + B-shift 1,100 t/h over 6h combine to 1,233.3 t/h, never the naive 1,200 average), and aResultCacheconcurrency stress test.tests/fixtures/kpis/andtests/integration/test_kpi_pipeline.py: a realistic one-shift golden dataset (every canonical event type) and the full CSV → canonical events →EventStore→KPIEnginepipeline proven end to end with no stage bypassed.examples/kpis/: four runnable examples - single-KPI execution, compositeUTIL.OEEexecution, batched multi-KPIsummary(), andREGISTRYdiscovery - plus a shared sample-dataset loader.notebooks/beginner/01_first_kpi_lookup.ipynb: the first notebook in the Learning & Benchmark Suite v1.0's pedagogical progression, proven to execute headlessly end to end.kpis/README.md: architecture, dependency rules, public API reference, extension guide, design rationale, and anti-patterns.- New optional dependency group
notebooks(jupyter,ipykernel).
Fixed¶
DuckDBBackend.group_and_aggregatewas silently dropping the group-by column from its projected output (relation.aggregate()only returns what is listed in its own SELECT expression) - a genuine backend-parity violation, caught by the pre-pytest smoke test and now covered by a dedicated regression test.PhysicalAvailability._compute(UTIL.PA) indexedrows[0]unconditionally, raisingIndexErrorfor a shift with genuinely zeroMaintenanceEventrows instead of returningNone.kpis/__init__.py's__all__was not actually alphabetically sorted (REGISTRYsat first rather than in its correct position).
Notes¶
kpisdepends oncore,ontology,events, andregistryonly — mechanically verified (tests/unit/kpis/test_public_api.py) to import nothing fromconnectors,analytics,optimization,simulation,decision,digital_twin, oragents- the single most load-bearing rule in the design specification.KPIValidator's canonical time-model textual check now scopes to leaf (non-composite)UtilizationKPIsubclasses only, since a composite's own formula composes other KPI codes' results rather than raw hour fields directly.pyproject.tomlgained theanalyticsoptional dependency group (numpy,pandas,polars,duckdb) and a[[tool.mypy.overrides]]entry forpandas/polars/duckdb(no bundled type stubs).
[0.6.0] - 2026-07-03¶
Added¶
mineproductivity.connectors: the Connector Framework - the single, small contract every data source must satisfy to feed the platform, and the only place in the codebase permitted to know that a specific vendor or file format exists, implementingdocs/architecture/04_Connector_Framework_Design_Specification.mdexactly.FMSConnector(onlyget_cycle_data/get_delay_dataabstract; four moreget_*_datamethods with no-op defaults) andIngestionMode;Normalizer/FieldMapper/ReasonCodeMap(the vendor-dialect-to-canonical translation layer, independently unit-testable without a live connection);AuthProvider/CredentialsandRetryPolicy/BackoffStrategy/run_with_retry(shared, generic network-connector plumbing, with a mandatory concurrent-safeAuthProvider.refresh()guarantee);ConnectorHealth/HealthStatus; andrun_fms_contract_suite(the shared structural contract every connector, built-in or plugin, is expected to pass).- Six reference connectors, all genuinely functional (not stubs):
CSVConnector/ExcelConnector(file, with local-timezone normalization to UTC),RestConnector/GraphQLConnector(network, stdliburllibonly - paginate, 401-triggered auth refresh, retry/ backoff on transient failures), andKafkaConnector/MqttConnector(streaming, via a pluggable message-source abstraction rather than a broker client library dependency). All six are registered intoCONNECTORSby default. - Five OEM adapter shapes -
MineStarConnector,DispatchConnector,WencoConnector,ModularConnector,HexagonConnector— plus an illustrativeReasonCodeMapper vendor. Documentation-only: bothget_cycle_data/get_delay_dataraiseNotImplementedError, and none is registered by default. No vendor SDK code exists in this repository or is implied by these classes (design spec AD-CN-03). tests/fixtures/connectors/: small, synthetic (not vendor-derived) CSV fixtures — golden, malformed (Category D), and local-timezone (Category F) variants.tests/unit/connectors/: a full unit test suite (241 tests, 100% line coverage), includingRestConnector/GraphQLConnectortested against a real, localhttp.server.HTTPServer(genuine socket I/O, not a patched client).tests/integration/test_connector_pipeline.py: the full CSV →CSVConnector→EventValidator→EventStore→ query pipeline, plus Certification Categories A (golden), C (edge cases), D (corrupted data), and F (timezone).examples/connectors/: runnable examples for end-to-end CSV ingestion and a REST connector's auth-refresh/retry-backoff behavior against a real local HTTP server.connectors/README.md: architecture, dependency rules, public API reference, extension guide, design rationale, and anti-patterns.- New optional dependency group
connectors(openpyxl, andtzdataon Windows only) - imported lazily, never required toimport mineproductivity.connectors.
Notes¶
connectorsdepends oncore,ontology,events, andregistryonly — mechanically verified (tests/unit/connectors/test_public_api.py) to import nothing fromkpis,analytics,optimization,simulation,decision,digital_twin, oragents- the single most load-bearing rule in the design specification.pyproject.tomlgained[[tool.mypy.overrides]]entries foropenpyxl(no bundled type stubs) and the registry test fixture packages (installed without apy.typedmarker).
[0.5.0] - 2026-07-03¶
Added¶
mineproductivity.registry: the generic, type-safe registration mechanism every domain package specializes rather than reimplements, implementingdocs/architecture/03_Registry_Framework_Design_Specification.mdexactly.Registry[TKey, TItem](register/lookup/get/list/ metadata_for, add-only registration with duplicate-key rejection),EntryPointSpec/EntryPointDiscovery(scansimportlib.metadataentry-points, isolating any single entry-point's import failure from the rest of the scan),registered_in()(the generic@registerdecorator factory),VersionRange/VersionCompatibility(stdlib-only, dependency-free version-range gating), andDiscoveryCache(scan-once-per-process memoization, safe under concurrent calls for the same spec).mineproductivity.plugins: the plugin lifecycle layer built onregistry-PluginManifest/PluginDependency,PluginState(DISCOVERED/VALIDATED/ACTIVE/FAILED/DEACTIVATED),PluginLifecycle(the ABC) and_DefaultPluginLifecycle(the reference implementation, in the pattern ofevents._InMemoryEventStore),PluginLoader(aggregates every entry-point group one manifest declares), andresolve_activation_order()(topological-sort dependency resolution via Kahn's algorithm, detecting missing dependencies and cycles).tests/fixtures/plugins/: two real, independently pip-installable fixture plugin packages (registry-fixture-healthy,registry-fixture-broken) used to prove discovery and isolation end-to-end against actual installed package metadata, not mocks.tests/unit/registry/andtests/unit/plugins/: full unit test suites (127 tests combined, 100% line coverage), including a thread-based concurrency stress test forDiscoveryCacheand a dedicated isolation test proving oneFailedplugin never blocks another's path toActive.tests/integration/test_registry_plugin_discovery.py: discovery, isolation, and full manifest-to-activation proven against the real fixture packages, plus a zero-core-change proof.examples/registry/: runnable examples for the full register → discover → lookup cycle (against a real, on-disk plugin module) and side-by-side compatible/incompatible plugin activation.registry/README.mdandplugins/README.md: architecture, dependency rules, public API reference, extension guide, design rationale, and anti-patterns.
Notes¶
registrydepends oncoreonly;pluginsdepends oncoreandregistryonly — both mechanically verified (tests/unit/registry/test_public_api.py,tests/unit/plugins/test_public_api.py) to import nothing from any domain package (ontology,events,connectors,kpis,analytics,optimization,simulation,decision,digital_twin,agents).pyproject.tomlgained a[[tool.mypy.overrides]]entry for the two registry test fixture packages (installed without apy.typedmarker, since they exist only to prove real-package discovery).
[0.4.0] - 2026-07-03¶
Added¶
mineproductivity.ontology: the Ontology Framework — the typed, machine-readable model of the mining world, implementingdocs/architecture/02_Ontology_Framework_Design_Specification.mdexactly.BaseEntityType/EntityTypeMetadata(the entity-type root, with structural validation enforced at construction and JSON Schema export viato_schema()),Relationship/RelationshipKind(explicit, typed edges between entity ids),OntologyValidator(contextual, cross-entity referential validation - an unresolved reference is always a warning, never a raised exception), andKnowledgeGraphProjection/GraphNode/GraphEdge(the contract a future Knowledge Graph builder consumes).- Ten sub-ontology families, each a leaf of
BaseEntityType: equipment (EquipmentType/OperationalStateroot plus 12 leaf types —RigidHaulTruck,ArticulatedHaulTruck,HydraulicShovel,WheelLoader,LHD,BlastholeDrill,Dozer,Grader,WaterTruck,Crusher,Conveyor,Mill), material (Commodity,MaterialType), location (Mine,Pit,Bench,Route,Zone,Level,Stope,Drive), organization (Fleet,Crew,Operator,BusinessUnit,Contractor), production (Shift,ShiftPattern,ShiftCalendar), maintenance (FailureMode,MaintenanceWorkOrder), cost (CostCenter,CostCategory), quality (GradeAttribute,QualitySpecification), safety (HazardZone,SpeedLimitMap,SafetyEventType), and environmental (EmissionFactor,MonitoringPoint). mineproductivity.ontology.SafetyEventType: relocated frommineproductivity.events.canonical.safety_eventto its permanent, governed home inontology.safety, for the identical reasonDelayCategoryis owned byontologyand notevents(a closed, governed taxonomy is domain reference data, not event structure - design spec AD-ON-03).events.SafetyEvent.safety_event_typenow imports and consumes this enum rather than defining its own copy.tests/unit/ontology/: a full unit test suite (207 tests, 100% line coverage), mirroring all ten sub-ontology families plus the cross-cutting root modules (entity_type,relationship,graph_projection,validation,exceptions,public_api).tests/integration/test_ontology_model.py: a multi-family mine model (location, equipment, organization, production, cost, safety) wired together withRelationshipedges, validated end-to-end withOntologyValidator, projected through aKnowledgeGraphProjection, and cross-checked againstevents.DelayEvent/events.SafetyEventto confirm the two packages share reference-data identity rather than duplicating it.examples/ontology/: runnable examples for equipment modelling, structural modelling with relationship traversal, and contextual validation.ontology/README.md: architecture, dependency rules, public API reference, extension guide, design rationale, and anti-patterns.
Changed¶
mineproductivity.events.canonical.safety_event.SafetyEvent .safety_event_typeis now typed againstmineproductivity.ontology .SafetyEventTypeinstead of a locally-defined enum of the same shape.events.SafetyEventTyperemains importable (re-exported throughevents.canonicalandevents, unchanged for existing callers) but is now the exact same object asontology.SafetyEventType, not a duplicate.
Fixed¶
core.BaseEntityhas no__post_init__/validate()hook of its own (no package built entity types on top of it before this one) -BaseEntityTypeadds that hook locally, mirroringcore.BaseValueObject's existing_normalize()/validate()pattern exactly, without modifying the lockedcorepackage.Relationship.validate()previously raised the barecore.ValidationErrorinstead of the package-scopedontology.exceptions.RelationshipErrorits own exception hierarchy defines for exactly this case - fixed for consistency with every other validation path in this package.
Notes¶
ontologydepends oncoreonly - mechanically verified (tests/unit/ontology/test_public_api.py) to import nothing fromevents,registry,connectors,kpis,analytics,optimization,simulation,decision,digital_twin, oragents.eventsnow depends on two ontology reference taxonomies -DelayCategoryandSafetyEventType- both closed, governed enums with no behavior beyond what the design specification defines; still no ontology entity types, registry, or services are consumed byevents.
[0.3.0] - 2026-07-03¶
Added¶
mineproductivity.events: the Event Framework - the immutable, append-only event model (Event Sourcing) every derived state in the platform is computed from, implementingdocs/architecture/01_Event_Framework_Design_Specification.mdexactly.EventID(ULID-backed, stdlib-only),EventVersion,EventMetadata,EventEnvelope(with the mandatory three-timestamp temporal model),BaseEventand the six canonical event types (CycleEvent,DelayEvent,MaintenanceEvent,ProductionEvent,ConsumptionEvent,SafetyEvent),EventSchema,EventValidator/ConfidenceScore/ValidationOutcome,EventStore/EventQuery/EventFilterand a reference_InMemoryEventStore,EventBus/Subscriptionand a reference_InMemoryEventBus,AsOf/ReplayHandle(time-travel) andEventSnapshot, and three serialization codecs (JSONEventCodecwith no extra dependency;ArrowEventCodec/ParquetEventCodecbehind the new optionaleventsextra).mineproductivity.ontology.reference.DelayCategory: the minimal shared contract (a closed six-value enum) published ahead of the full Ontology Framework milestone, per Documentation Governance Rule #005, becauseevents.DelayEventrequires it. No other ontology concept exists yet.tests/unit/events/: a full unit test suite (229 tests, 100% line coverage), including dedicated property tests for idempotency and the replay/snapshot equivalence law.tests/integration/test_events_pipeline.py: the full ingest → validate → append → publish → query → replay → serialize pipeline, end to end.examples/events/: runnable examples for first-event construction, replay/time-travel, and corrections.events/README.md: architecture, dependency rules, public API reference, extension guide, design rationale, and anti-patterns.
Fixed¶
- A
@dataclass(slots=True)+ inheritance + baresuper()gotcha inEventMetadata.validate()(slotted dataclasses rebuild the class object, which breaks the implicit__class__cell a zero-argsuper()relies on) - fixed with the explicit two-argument form, with a regression test guarding it. - An Arrow/Parquet limitation where an all-empty
metadata.attributescolumn across a batch produced a zero-child struct type that Parquet's writer cannot represent - fixed by JSON-string-encoding that one open-ended field for the Arrow/Parquet codecs specifically.
Notes¶
eventsdepends oncoreand, minimally,ontology.DelayCategoryonly - mechanically verified (tests/unit/events/test_public_api.py) to import nothing fromconnectors,kpis,analytics,optimization,simulation,decision,digital_twin, oragents.pyproject.tomlgained aneventsoptional-dependency group (pyarrow) and a[[tool.mypy.overrides]]entry for it (pyarrowships no type stubs); the base install remains dependency-free.
[0.2.0] - 2026-07-02¶
Added¶
mineproductivity.core: the platform's first implemented package, providing framework-agnostic, domain-agnostic foundational primitives —BaseEntity,BaseValueObject,BaseIdentifier/UUIDIdentifier,BaseMetadata,BaseVersionedObject,BaseSpecification(with&/|/~composition),BaseRepository/InMemoryRepository,BaseFactory,BaseBuilder,BaseService,BaseValidator/ValidationResult/CompositeValidator,BaseSerializer/DataclassSerializer,BaseConfiguration,Result[T],Maybe[T], theMineProductivityErrorexception hierarchy, and shared typing primitives (Comparable,Identifiable,JSONValue).tests/unit/core/: a full unit test suite for everycoremodule (equality, hashing, immutability, validation, serialization, generics, ABC enforcement, edge cases).examples/core/: runnable examples demonstrating entities, value objects, repositories, factories, builders, validation, and serialization.core/README.md: architecture, dependency rules, public API reference, extension guide, design rationale, and anti-patterns for the package.
Notes¶
corehas zero dependencies on any othermineproductivitypackage and zero knowledge of the mining domain (no KPI, event, ontology, equipment, dispatch, connector, analytics, optimization, digital twin, or decision concepts). Every other subsystem package remains an unimplemented structural placeholder.
[0.1.0] - 2026-07-01¶
Added¶
- Initial repository skeleton: full directory hierarchy for
src/,tests/,docs/,datasets/,notebooks/,examples/,benchmark/,certification/, andscripts/, mirroring the locked Master Architecture Handbook v1.0 and Reference Implementation Blueprint v1.0. - Packaging metadata (
pyproject.toml) targeting Python 3.12+, using Hatchling and thesrc/layout. - Governance and community files:
README.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,SECURITY.md,ROADMAP.md,CITATION.cff. - GitHub configuration: issue templates, pull request template,
CODEOWNERS, and placeholder CI workflows (no CI logic implemented yet). - Placeholder
README.mdfiles describing purpose, scope, responsibilities, contents, dependencies, future work, and references for every package and directory in the tree.
Notes¶
- Zero business logic. No KPI calculations, digital twin implementation, connectors, AI agents, analytics, optimization, or event processing exist in this release.