Repository navigation
Conversation
…hrough Add design_with_ppa.rtl.python_dut.options.verilator_args: a list of single-token verilator arguments the managed Python-DUT build forwards through picker's --vflag. The absent-key default injects --output-split 2000 so verilator's statement-count splitter keeps each generated C++ file small enough for parallel compilation; a configured list replaces the default wholesale and is validated against whitespace, quotes, and shell/Makefile metacharacters. Multi-token values are single-quoted for picker's shell-based console launcher so they arrive as one --vflag argument. The normalized options join the RTL config identity, so changing them invalidates cached builds.
…ault Add design_with_ppa.rtl.python_dut.options.ccache_enabled (default true). When the ccache command is installed, the managed Python-DUT build routes generated C++ compilation through it via a compiler-name PATH masquerade, without touching picker's fixed generated cmake invocation; CCACHE_BASEDIR, CCACHE_NOHASHDIR, and CCACHE_IGNOREOPTIONS are set so rebuilds from fresh temporary directories still hit the cache and picker's hardcoded -march=native probe cannot disable it. When ccache is missing, the build warns with install guidance and proceeds uncached; false disables the cache entirely. The option joins the RTL config identity, so toggling it invalidates cached builds.
A stage_args timeout previously tripped the reserved-field guard and failed the whole call, even though it names the same call-time budget as the tool-level timeout parameter. Consume it exactly like the existing full_output control: validate it as a non-negative integer number of seconds, pop it before Checker dispatch, and run Check/ Complete with the larger of the tool-level and stage_args values so a caller-granted budget is never truncated. is_complete stays reserved and is now rejected with a message naming the field and why. Document the control field in the Check/Complete tool schemas and the checker development guide.
… builds prepare_unit now takes the resolved workflow configuration and forwards design_with_ppa.rtl.python_dut.options - the verilator -V passthrough and the ccache wrapper - into the managed unit build, so repo-module-tdd users configure them like unit-design-tdd users via config.yaml or --override. The RTL language, source glob, and template stay pinned to the module's normalized unit sources, and the forwarded options join the build identity so changing them rebuilds. validate_unit and the delivery replay pass their RepoPaths cfg, and repo-module-tdd.yaml declares the option defaults so they remain discoverable in the workflow config file.
… references Scoring every candidate scope by rescanning the whole VCD header is quadratic in declared references, and rebuilding the expected-bit port index inside _reference_bit_positions on every call multiplied that cost by the input-port width. On wide generated-RTL waveforms the discovery alone cost about 100 seconds per performance TC. Group all declared references under their direct parent scope once, hoist the port index to the callers, and score each candidate from its own children only. Scope selection semantics (deepest deterministic candidate, custom-scope preservation) are unchanged; a deep-hierarchy regression test guards the linear bound.
…T waveforms The temporary VCD produced before activity parsing dumped every facet of the DUT (about 119 MB per performance TC on wide designs) even though only top-level input ports are ever bound. Pass the synthesized input-port names to _convert_fst_to_vcd and set per-facet process masks through pylibfst so only matching facets are decoded; FST hierarchy vector names carry a spaced suffix that is stripped before matching. The emitted hierarchy section still lists every declared signal, so scope discovery and coverage checks observe the same contract, and a wanted set matching no facet falls back to full decoding. Focused tests cover filtered/full activity equivalence, vector-suffixed names, and the fallback path.
Add master_api.max_task_count (default 100) as the maximum number of managed tasks the master executes in parallel. A validated launch request that exceeds the limit, or arrives while earlier submissions are still waiting, is stored as a waiting task record and started automatically in submission order once a slot frees up. New submissions never jump the queue. Waiting tasks carry a monotonic queue_seq that survives restarts and backs POST /api/tasks/waiting/order for reordering the queue. They can be stopped out of the queue while keeping their workspace, or deleted to cancel the submission together with its workspace directory. List and detail responses expose queue_position, and /api/tasks and /api/agents expose max_task_count and waiting_task_count for clients. Dispatch failures keep a failed task record instead of silently dropping the queued submission.
Add a Waiting stat card beside Total/Online/Offline on the master dashboard and a Launch Queue panel on the task page. The panel is the single place waiting tasks are listed, showing queue position, task id, DUT, and created/queued timestamps; rows reorder the queue by drag-and-drop or move buttons and cancel queued submissions. The task list no longer repeats waiting rows, keeps CMD/Terminal disabled until a task starts, and shows a permanent max-parallel chip. The launch page reports queued submissions explicitly for single and batch launches.
Switch the default launch backend to opencode, require the reference model for DUT tests (NEED_REF_MODEL), stop ignoring mock components, and drop the OPENAI_CONTEXT_SIZE, OPENAI_OUTPUT_SIZE, and CLAUDE_CODE_MAX_CONTEXT_TOKENS environment entries.
Show a full docker run --env-file example alongside the -e flags, and keep env-file comments on their own lines: docker does not strip inline comments, so a trailing '# ...' would become part of the value. Sync the same section into README.en.md.
Tasks launched through the master now default to --mcp-server-port -1 so each child picks a free port instead of every task competing for the shared mcp_server.port (5000), which breaks parallel launches. An explicit port in a launch request still wins over the default. Cover the default and the explicit-override path with focused tests on the launch request merge and child command construction.
wutianze
added this pull request to stack #143
October 10, 2026 02:47
un_write_dirs and write_dirs entries now accept glob patterns: *, ?, and [...] match within one path segment, a ** segment matches zero or more whole segments, and a matched path protects or allows everything below it. Literal entries keep exact component comparison. The shared matcher in tools/fileops.py now gates the file write tools, ApplyWaveInfoEvidence target resolution, the template-target read-only conflict check, --no-write targets, PDB add_write_path/add_un_write_path at runtime, and the RTL2Spec plugin's protected-children precheck. Tool init warns via glob expansion instead of a literal existence check, and denial diagnostics name the matched no-write entry.
… write_dirs entries
When a path matches both lists, the deepest matching entry now decides:
a write entry strictly below a no-write entry makes that subtree writable
again (e.g. un_write_dirs ["{DUT}"] with write_dirs ["{DUT}/*.md",
"{DUT}/{DUT}.db/"]), while an equal-depth conflict keeps the path
protected, preserving the single-file self-protection contract.
The startup read-only chmod skips paths the write policy re-allows and
keeps protected directories writable when they hold declared write
entries, so carve-out directories that only appear at runtime can be
created and filled. ApplyWaveInfoEvidence resolves targets with the same
precedence, and allowed/denied diagnostics name the deciding entry.
…ted DUT
Add {DUT}/**/*.vdb, {DUT}/**/*.fsdb, and {DUT}/**/*.vpd to the default
write_dirs. VCS creates *.vdb data directories and dumps *.fsdb/*.vpd
waveform files wherever the simulator runs, including inside the DUT
tree, and needs to create them at runtime. The carve-out keeps matched
paths and their subtrees writable while the rest of {DUT} stays
protected; the contract is locked by a config loader test that renders
the defaults and checks both the allowed artifacts and still-protected
siblings.
…ctory The "formal_test copy" template tree was committed by mistake and is not referenced by any workflow, config, or test. Remove it entirely.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.