feat: contract ops reorg signing process#182
Merged
Merged
Conversation
This was referenced Jun 28, 2026
0xth4nh
added a commit
that referenced
this pull request
Jun 28, 2026
- Use shared isSafePathSegment from path-validation in install-deps route instead of a duplicated local regex - Restore dropped id assertion in upgrades route test - Eliminate double README read in getUpgradeOption by removing redundant defaultDate pre-computation (readDeploymentInfoFromReadme already derives the date from the content it reads) - Remove redundant hasTaskLayout guard inside getUpgradeOption; the caller getUpgradeOptions already confirms the tasks directory exists before invoking this function Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
jackchuma
reviewed
Jul 6, 2026
0xth4nh
added a commit
that referenced
this pull request
Jul 6, 2026
- Sign over network config dir instead of active/evm (comment 1) - Remove network selection step; auto-select from task option (comment 6) - Delete availableNetworksForTask derived state (comment 7) - Remove unreachable empty-state branch in NetworkSelection (comment 8) - Remove options param from readDeploymentInfoFromReadme; preserve folder date for date-prefixed tasks (comments 3, 4) - Inline and delete getUpgradeForNetwork one-liner (comment 5) - Revert upgrades sort to by-id (comment 11) - Remove unnecessary String() cast on upgradeId (comment 10) Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
0xth4nh
added a commit
that referenced
this pull request
Jul 7, 2026
- Use shared isSafePathSegment from path-validation in install-deps route instead of a duplicated local regex - Restore dropped id assertion in upgrades route test - Eliminate double README read in getUpgradeOption by removing redundant defaultDate pre-computation (readDeploymentInfoFromReadme already derives the date from the content it reads) - Remove redundant hasTaskLayout guard inside getUpgradeOption; the caller getUpgradeOptions already confirms the tasks directory exists before invoking this function Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
0xth4nh
added a commit
that referenced
this pull request
Jul 7, 2026
- Sign over network config dir instead of active/evm (comment 1) - Remove network selection step; auto-select from task option (comment 6) - Delete availableNetworksForTask derived state (comment 7) - Remove unreachable empty-state branch in NetworkSelection (comment 8) - Remove options param from readDeploymentInfoFromReadme; preserve folder date for date-prefixed tasks (comments 3, 4) - Inline and delete getUpgradeForNetwork one-liner (comment 5) - Revert upgrades sort to by-id (comment 11) - Remove unnecessary String() cast on upgradeId (comment 10) Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
973cb34 to
64a8d5c
Compare
jackchuma
reviewed
Jul 7, 2026
jackchuma
left a comment
Collaborator
There was a problem hiding this comment.
This PR still seems to be trying to do way too much and still has significant bloat. What are the minimal changes needed to support the new active/evm/ directory structure?
0xth4nh
added a commit
that referenced
this pull request
Jul 7, 2026
- Remove actualUpgradeId no-op alias in install-deps route - Remove startDir param from findContractDeploymentsRoot (no callers pass it) - Remove deriveDateFromContent and folderHasDate logic (task folders always have date prefix) - Remove redundant sort in upgrades route (getUpgradeOptions already sorts) - Revert StepIndicator CSS change (unrelated to this PR) - Update README: task-origin signatures are over the network config folder, not active/evm Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
f6e330e to
d99a7fe
Compare
Base automatically changed from
contract-ops-reorg-task-origin-verification
to
main
July 8, 2026 21:35
Collaborator
✅ Heimdall Review Status
|
16bdce4 to
e0831f1
Compare
Update the signing flow for the active EVM task layout introduced by the task-origin reorg (#181): - Discover active tasks under active/evm/tasks/<task-id> and expose ready-to-sign task/network pairs via /api/upgrades. - /api/upgrade-config and /api/install-deps accept network + upgradeId; deps run from active/evm. - Task metadata is read from the first README found: config/<network>/README.md, then <task>/README.md, then active/evm/README.md; display name uses the first heading when present. - Remove root-level network/task discovery and the unused NetworkSelection component. - Docs: document the signer flow and README fallback on top of the active/evm task-origin layout. Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
e0831f1 to
df5259d
Compare
jackchuma
approved these changes
Jul 8, 2026
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.
Summary
Updates the signer UI and API for the active EVM task layout introduced by #181 (now merged into
main).Discovery and selection are keyed on the new layout:
active/evmactive/evm/tasks/<task-id>(must be date-prefixed,YYYY-MM-DD-…)active/evm/tasks/<task-id>/config/<network>/validationsWhat changed
Task discovery
<network>/<task>discovery.getUpgradeOptions(network)now lists date-prefixed task folders underactive/evm/tasks/that have aconfig/<network>/validationsdirectory for the selected network.template/,archive/) are ignored via the date-prefix filter.active/evm/tasks/<task-id>/config/<network>/README.md, then.../<task-id>/README.md, thenactive/evm/README.md. The display name uses the first#heading when present, otherwise the formatted folder name.Signer flow
/api/upgrades?readyToSign=truereturns one ready-to-sign entry per task/network, and each is rendered as its own card; selecting a card fixes both the task and its network. Cards are identified bynetwork + idso a task ready on multiple networks does not share selection/expansion state.upgradeIdremains part of the app contract because multiple active tasks can exist at once.API changes
/api/upgrades?readyToSign=truereturns ready-to-sign task/network pairs, sorted by task id (newest first) across all networks./api/upgrade-configacceptsnetworkandupgradeIdand reads fromactive/evm/tasks/<task-id>/config/<network>/validations./api/install-depsacceptsnetworkandupgradeId, verifies the selected task folder exists, and runsmake depsfromactive/evm./api/upgrade-configand/api/install-depsvalidatenetwork/upgradeIdagainst^[a-zA-Z0-9_-]+$before touching the filesystem, backed byassertWithinDir.Cleanup
NetworkSelectioncomponent and deadid/nameprops threaded throughValidationResults/SigningConfirmation.Docs
Tests
deployments: active-task discovery, per-network metadata, non-date-dir exclusion, and confirmation that old root-level tasks are no longer discovered.upgradesroute: newest-first ordering when aggregating ready-to-sign tasks across networks.install-depsroute: rejects path-traversal / unsafenetwork/upgradeIdwith 400.Verification
npm testnpm run lintnpm run buildAll pass locally.