Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
f7da87e
Add Workflow Manager: visual pipeline builder, cloud testing, and edg…
rvanderwerf Jul 13, 2026
0c61fae
Add custom-node-designer spec requirements (node creation, plugin imp…
rvanderwerf Jul 13, 2026
30ce06b
custom-node-designer spec: auto plugin component packaging/deployment…
rvanderwerf Jul 13, 2026
d8da6ca
custom-node-designer spec: design document (23 correctness properties…
rvanderwerf Jul 13, 2026
c71273a
custom-node-designer spec: implementation task list (52 tasks, 15 waves)
rvanderwerf Jul 14, 2026
88a77e6
custom-node-designer: full implementation plus post-launch fixes
rvanderwerf Jul 15, 2026
cdca5c3
workflow builder: pass usecase_id to the node-catalog request
rvanderwerf Jul 15, 2026
f3ab13a
Add GStreamer parameter pre-population for the Node Designer wizards
rvanderwerf Jul 15, 2026
58177a5
Cap hypothesis property tests at 25 examples for fast local runs
rvanderwerf Jul 16, 2026
e38a7e7
Add camera registry sync across edge, portal, and deployment binding
rvanderwerf Jul 16, 2026
0c52e08
docs(spec): add port-guidance-and-pad-prepopulation spec (requirement…
rvanderwerf Jul 16, 2026
1aef1a7
fix(portal): consistent read for auto-started builds after revision-m…
rvanderwerf Jul 16, 2026
ace2b7f
Update stale components.py hash in IAM out-of-scope baseline
rvanderwerf Jul 16, 2026
67998c3
docs(specs): sync spec task states; add imported-plugin-revision-adju…
rvanderwerf Jul 16, 2026
484e67d
Merge branch 'workflow_manager' of https://github.com/awslabs/DefectD…
rvanderwerf Jul 16, 2026
0db8261
feat(portal): post-import per-platform revision adjustment (imported-…
rvanderwerf Jul 16, 2026
63fb82c
feat(portal): port guidance and pad pre-population for the node desig…
rvanderwerf Jul 16, 2026
43480e2
fix(portal): workflow designer bugfixes (temperature, port defaults, …
rvanderwerf Jul 17, 2026
555823c
feat(portal+edge): custom Python frame processing (custom-python-frames)
rvanderwerf Jul 17, 2026
4d24df6
feat(portal+edge): Aravis camera input node with edge registry sync (…
rvanderwerf Jul 17, 2026
dc5fdd5
Merge pull request #69 from awslabs/workflow_bugfix
rvanderwerf Jul 17, 2026
92f4b24
fix(portal): use consistent read after adjust_revision update to avoi…
rvanderwerf Jul 17, 2026
97197c4
feat(portal): plugin build extra-deps manifest (dda-build-deps.txt) +…
rvanderwerf Jul 17, 2026
7b63dc5
test(edge): drift-proofing PBT + downstream staging tests for triton …
rvanderwerf Jul 17, 2026
d62616e
fix(build): make publish-ecr-only.sh safe to alternate JP5/JP6 targets
rvanderwerf Jul 17, 2026
83f936d
fix(edge): copy camera_discovery, camera_sync, workflow_engine into b…
rvanderwerf Jul 17, 2026
5d09cef
feat(portal): custom node code assist (custom-node-code-assist)
rvanderwerf Jul 17, 2026
ae5ac53
Merge branch 'workflow_manager' of https://github.com/awslabs/DefectD…
rvanderwerf Jul 17, 2026
e9d8af8
fix(deploy): no-cache index.html/config.json, immutable hashed assets
rvanderwerf Jul 17, 2026
e6623d9
fix(build): correct gdk-config.json publish region and build args
rvanderwerf Jul 17, 2026
b474c91
fix(portal): auto-include ShadowManager sync config in LocalServer de…
rvanderwerf Jul 18, 2026
558bd5c
fix(edge-ui): deployed-workflows pages in LocalServer (edge-workflow-…
rvanderwerf Jul 18, 2026
e60c6d9
Pin componentVersion for auto-included ShadowManager in Portal deploy…
rvanderwerf Jul 18, 2026
a8a46c9
station_install: grant ShadowManager shadow-sync permissions to token…
rvanderwerf Jul 18, 2026
7a0b8c4
Recapture setup_station.sh dependency preservation golden
rvanderwerf Jul 18, 2026
8d0cb1e
Fix recaptured setup_station golden to keep the baseline 2.32.3 pin
rvanderwerf Jul 18, 2026
b04e5ab
feat(portal+edge): user manager with edge account sync and local logi…
rvanderwerf Jul 18, 2026
4e89185
Merge remote-tracking branch 'origin/workflow_manager' into workflow_…
rvanderwerf Jul 18, 2026
e6e2412
fix(infra): suppress template indentation to stay under CFN 1MB limit
rvanderwerf Jul 18, 2026
d3cbda2
feat(portal): user account life-cycle - create, disable/enable, delet…
rvanderwerf Jul 18, 2026
c101712
Copy local_auth and user_accounts_sync modules into backend Docker im…
rvanderwerf Jul 18, 2026
c129f98
Merge branch 'workflow_manager' of https://github.com/awslabs/DefectD…
rvanderwerf Jul 18, 2026
1e7e2b3
fix(infra): add missing API Gateway routes for account life-cycle end…
rvanderwerf Jul 18, 2026
7387fdd
fix(infra): grant user_admin read access to the audit-log table
rvanderwerf Jul 18, 2026
8330414
fix(portal): pass Cognito conflict message through on account creation
rvanderwerf Jul 19, 2026
49c0b7b
fix(portal): collect first and last name in the new-password challenge
rvanderwerf Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .kiro/specs/adjust-revision-stale-read-fix/.config.kiro
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"specId": "473d5f24-2501-429d-a053-62d3153df110", "workflowType": "requirements-first", "specType": "bugfix"}
43 changes: 43 additions & 0 deletions .kiro/specs/adjust-revision-stale-read-fix/bugfix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Bugfix Requirements Document

## Introduction

The "adjust revision for this platform" action (delivered by the imported-plugin-revision-adjustment-fix spec) lets a user apply a compatible source revision to an imported plugin's platform and re-run its build. In practice, the FIRST build started right after applying the adjustment ALWAYS compiles the ORIGINAL revision's source tree and fails (e.g. meson requires `gstreamer-1.0 >= 1.19.0` while the build image ships 1.16.3); manually re-running the build then compiles the adjusted revision's tree and succeeds.

The root cause is a read-after-write race. The adjustment paths write the record's revision mapping (`arch_revisions` / `fetches`) with an `update_item`, then immediately auto-start the queued builds. That auto-start re-reads the record with an eventually-consistent DynamoDB `get_item` (no `ConsistentRead`), which can return the pre-write item. With the stale item, the build's source prefix resolution finds no adjusted mapping and falls back to the original revision's tree, so the CodeBuild `sourceLocationOverride` points at the wrong source. The race exists on both adjustment paths: the fetch-success result handler and the reuse path that maps an architecture to an already-fetched revision.

The fix must ensure a build auto-started immediately after an adjustment write always resolves its source from the post-write record state, without changing any other read path or build flow.

## Bug Analysis

### Current Behavior (Defect)

A queued per-arch build is auto-started within the same invocation immediately after a write that changed the record's revision mapping, and the auto-start's eventually-consistent re-read returns the pre-write item:

1.1 WHEN an adjustment fetch succeeds and the auto-started build's re-read of the record returns the pre-write item THEN the system resolves the architecture's source prefix without the just-written arch_revisions mapping and submits the build from the original revision's source tree, which fails

1.2 WHEN an adjustment reuses an already-fetched revision and the auto-started build's re-read of the record returns the pre-write item THEN the system resolves the architecture's source prefix without the just-written arch_revisions mapping and submits the build from the original revision's source tree, which fails

1.3 WHEN the first build after an adjustment fails this way and the user manually retries THEN the system reads fresh state, resolves the adjusted revision's source prefix, and the build succeeds — masking the defect as a transient failure

### Expected Behavior (Correct)

2.1 WHEN an adjustment fetch succeeds and the queued builds are auto-started THEN the system SHALL resolve each pending architecture's source prefix from the post-write record state so the build compiles the adjusted revision's source tree

2.2 WHEN an adjustment reuses an already-fetched revision and the queued build is auto-started THEN the system SHALL resolve the architecture's source prefix from the post-write record state so the build compiles the adjusted revision's source tree

2.3 WHEN a build is auto-started immediately after any write that changed the record's revision mapping THEN the system SHALL submit the CodeBuild sourceLocationOverride with a prefix that reflects the just-written mapping, regardless of DynamoDB read consistency timing

### Unchanged Behavior (Regression Prevention)

3.1 WHEN a build is auto-started for an architecture whose revision mapping was not changed by the adjustment THEN the system SHALL CONTINUE TO resolve its source prefix exactly as today (per-arch mapping if present, otherwise the flat source_s3_prefix)

3.2 WHEN a single-revision record has no per-architecture revision mappings THEN the system SHALL CONTINUE TO build from the flat source_s3_prefix layout

3.3 WHEN queued builds are auto-started after an import-time fetch settles (the original import flow, no adjustment involved) THEN the system SHALL CONTINUE TO start them with the same idempotency guarantees: already-started architectures are left alone, unconfigured architectures stay queued, and a StartBuild failure is recorded without raising to the caller

3.4 WHEN the user manually retries a failed build THEN the system SHALL CONTINUE TO re-submit it from the platform's currently recorded source tree

3.5 WHEN other callers read the plugin record (detail page, listing, source inspection, build-result handling) THEN the system SHALL CONTINUE TO behave as today, unaffected by the fix

3.6 WHEN an adjustment fetch fails THEN the system SHALL CONTINUE TO surface the failure on the affected platform's entry without starting builds or altering other platforms
Loading
Loading