Skip to content

refactor(runtime): consolidate ecc workspace runtime - #284

Merged
Yell-walkalone merged 47 commits into
mainfrom
ekko/refactor-ecc-runtime-consolidation
Sep 15, 2026
Merged

Yell-walkalone merged 47 commits into
mainfrom
ekko/refactor-ecc-runtime-consolidation

Conversation

@KoEkko

@KoEkko KoEkko commented Sep 14, 2026

Copy link
Copy Markdown
Collaborator

What Changed

  • Consolidate ECC project, workspace, flow, snapshot, and runtime APIs around the revisioned workspace model.
  • Add durable operation lifecycle handling, cancellation/recovery semantics, lock ordering, snapshot validation, and compatibility for older RPC clients.
  • Move CLI, QoR/signoff, workspace configuration, and runtime behavior onto the consolidated engine APIs with focused regression coverage.

Scope

Select the areas touched by this PR:

  • CLI - command behavior, Typer command surface, output formats, or workspace commands.
  • Flow/runtime - workspace lifecycle, EngineFlow, step execution, logs, metrics, or artifacts.
  • EDA integration - Yosys, ECC-Tools, DreamPlace, KLayout, PDKs, or native/runtime wrappers.
  • Build/package - Nix, PyInstaller, wheels, uv.lock, or release artifacts.
  • CI/release - GitHub Actions, version checks, changelog, or release automation.
  • Tests/docs only

Runtime And Packaging Impact

  • No runtime or packaging impact
  • CLI output or machine-readable contract changed
  • Workspace layout, flow state, or artifact paths changed
  • Native toolchain or wrapper behavior changed
  • ecc-tools or ecc-dreamplace dependency changed
  • PyInstaller, Nix, or release artifact changed

Notes:

  • The runtime and workspace contracts are consolidated; no native tool dependency version was changed.
  • uv.lock and the jsonrpcserver compatibility constraint were updated as part of the dependency metadata changes.

Validation

List the commands you ran. Mark checks that are not applicable as N/A.

  • uv run pytest test/ (ran CMAKE_BUILD_PARALLEL_LEVEL=2 uv run --no-sync pytest test/ -q: 2653 passed, 6 skipped, 1 deselected, 4 xfailed)
  • uv run ruff check chipcompiler test (ran uv run --no-sync ruff check chipcompiler test)
  • uv run ruff format --check chipcompiler test (ran uv run --no-sync ruff format --check chipcompiler test)
  • PyInstaller smoke: ecc --help, ecc --version, ecc version --json
  • Nix smoke: nix run .#cli -- --help
  • Manual flow smoke:
  • Other: bash .github/scripts/check-version.sh; uv lock --check; uv sync --locked --inexact --no-install-package ecc-dreamplace --no-install-package ecc-tools-bin; git diff --check origin/main...HEAD; commit-message checks for all commits and the PR title.

Skipped checks and reason:

  • PyInstaller, Nix, and manual RTL-to-GDS flow smoke were not run. The request explicitly defers DreamPlace and ecc-tools builds; the test suite used the existing native artifacts.

Checklist

  • I kept the change scoped to ECC.
  • I updated docs or user-facing CLI text where behavior changed.
  • I included lockfile or version metadata updates when dependencies changed.
  • I documented any submodule updates and why they are needed.
  • I did not include local caches, virtual environments, or generated build outputs.
  • I explained skipped validation and remaining risk.

Move the public parameter schema and workspace override helpers into the data layer while keeping CLI compatibility facades.
Preserve creator input modes, flow filters, read-only configuration and signoff assessment semantics across CLI and headless APIs.
Reuse the report scoring policy for headless assessments and expose the committed step callback contract.
Keep manifest audit timestamps, tolerate forward-version QoR facts and malformed checklists, and map collector failures to the signoff domain error.
Keep the CLI import paths as module aliases while making Project APIs independent of CLI internals, add read-only workspace loading, and materialize config-target parameters.
Keep configuration updates under an exclusive lock and recover from
on-disk backups instead of restoring file bytes from process memory.
Move fail thresholds, weights, and metric selection into qor_scoring.
CLI reports and Snapshot assessment call that module; stop documenting
a GUI port and a second threshold table.
Studio rejects the whole snapshot QoR section when any analysis metric
uses category "power". Restore the canonical power_integrity mapping
and remap existing on-disk qor_metrics.json when assembling snapshots.
Studio reads std_cell/macro/io-pad metrics plus database_facts and
lvs_connectivity_summary from the snapshot. Emit those from existing
feature JSON, and reject STA when pdk.sdc is unset instead of crashing.
Sizer stores Timing Opt as timing_optimization_sizer. Snapshot analysis
fell back to Timing optimization_sizer, so Studio showed empty QoR,
layout, reports, and subflow for a successful step.
KoEkko and others added 5 commits September 15, 2026 10:33
create_workspace only rebinding design.input_filelist in memory meant the
filelist input was lost whenever the workspace was reloaded from disk
(step subprocesses, later GUI sessions); synthesis then fell back to the
single origin verilog and multi-file designs failed hierarchy with
"Module <top> not found". Record the frozen filelist path in params.toml
(file_list) at creation and restore design.input_filelist from it in the
loader, keeping the origin/filelist convention as fallback.
@Yell-walkalone
Yell-walkalone merged commit 9081182 into main Sep 15, 2026
5 checks passed
@Emin017
Emin017 deleted the ekko/refactor-ecc-runtime-consolidation branch September 15, 2026 09:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants