Skip to content

docs(retros): post-merge retro for PR #659 (issue #653 Phase 2)#661

Merged
intel352 merged 1 commit into
mainfrom
docs/retro-issue-653-phase2
May 13, 2026
Merged

docs(retros): post-merge retro for PR #659 (issue #653 Phase 2)#661
intel352 merged 1 commit into
mainfrom
docs/retro-issue-653-phase2

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

Post-merge retrospective for PR #659 — issue #653 Phase 2: AWS operational tooling cutover (codebuild + EKS backend strip).

  • Scores all adversarial-review findings from design and plan phases
  • Documents 5 gate misses caught by Copilot review (double-call test, CI grep scope, blank lines, silent parse error, dead helpers)
  • Confirms all pipeline gates fired (no missed activations)
  • Proposes 2 plugin-level follow-ups (explicit grep scope in plans, cleanup adjacent artifacts on slice-entry removal)

Follows the docs/retros/ pattern established in #655 and #658.

🤖 Generated with Claude Code

…EKS strip)

Scored 5 design + 6 plan adversarial-review findings (all resolved upfront);
7 gate misses with specific plan/design checklist fix ideas. Pattern strength
sufficient to ship 2 plugin-level follow-ups (lint/line-hygiene on derived
test files — 3rd occurrence; branch-rebased-on-base check at PR creation —
1st occurrence with clear cause); 2 more waiting for one additional retro
(dead-helper sweep; method-contract preservation in error-backend stubs).
Copilot AI review requested due to automatic review settings May 13, 2026 17:22
@intel352 intel352 merged commit 7b554ee into main May 13, 2026
24 checks passed
@intel352 intel352 deleted the docs/retro-issue-653-phase2 branch May 13, 2026 17:22
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a post-merge retrospective document for PR #659 (issue #653 Phase 2), capturing adversarial-review findings, gate misses found during review, skill-activation audit, and proposed checklist/plugin follow-ups for future AWS SDK cutover work.

Changes:

  • Documents scored adversarial-review findings for design and plan phases.
  • Records gate misses surfaced during Copilot review rounds and lessons learned.
  • Proposes checklist/process follow-ups based on patterns observed across #617/#657/#659.

Comment on lines +46 to +49
| Stale blank lines left in `schema/schema.go` `coreModuleTypes` slice after `step.network_*` and `step.scaling_*` deletions (Phase 1 holdover surfaced in Phase 2 diff). (Copilot R2 on commit `ad74bab3`) | adversarial-design-review (Phase 1 plan) | This was a Phase 1 deletion site, not touched by Phase 2 directly. Copilot only flagged it on PR #659 because the merge-main commit `0325df6c` widened the visible diff. The Phase 1 retro did not catch it because the Phase 1 PR diff was self-consistent and Copilot reviewed Phase 1 separately. | When deletions are split across phases, add to plan-phase checklist: "for each registered-types slice with removed entries (coreModuleTypes, infraTypes, etc.), re-run `gofmt -d` after deletions to surface incidental blank lines." |
| `parser.ParseFile` errors silently discarded in `aws_absent_test.go` — `f, _ :=` means a syntax error in a source file is invisible to the test. (Copilot R2 on commit `ad74bab3`) | adversarial-design-review (plan) | The test file was carried over from Phase 1 verbatim; Phase 2 only added entries to the `freed` slice. The error-suppression was a Phase 1 carryover not flagged in either Phase 1 or Phase 2 plan review. | When extending an existing test file, plan-phase checklist should include: "audit the existing file's error handling against linter rules even if not modifying those lines — they may have been grandfathered." |
| `eksErrorBackend.status` returns `(nil, error)` while legacy `eksBackend.status` returned `(k.state, error)` — potential nil-pointer panic if a caller used the old contract of "always non-nil state". (Copilot R2 on commit `0325df6c`) | adversarial-design-review (design) | The design specified the error-backend method shape but did not audit each method's return-value contract against the legacy implementation. The (nil, error) return-shape change happens to be safe (verified by Jon: pipeline_step_platform_k8s.go checks err before deref), but the audit was not in the design's review pass. | Add to design-phase checklist: "for each method on a backend being replaced with an error stub, audit what callers do with the non-error return when error is non-nil — preserve any non-nil-on-error contracts the legacy implementation provided." |
| Dead helpers `awsProviderFrom`, `parseStringSlice`, `safeIntToInt32` and unused `math` import left behind after eksBackend deletion. (Inferred from Jon's R2 fix in `90907cdb`) | adversarial-design-review (plan) | Plan T2 specified removing the SDK imports but did not specify auditing helpers in other files that only the deleted backend called. The implementer (this session) only removed direct imports in platform_kubernetes_kind.go itself. | Add to plan-phase checklist: "for backend-removal tasks, grep across `module/` for every helper named or referenced in the deleted code; flag helpers with zero remaining callers for cleanup in the same commit." |
@github-actions
Copy link
Copy Markdown

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:264: parsing iteration count: invalid syntax
baseline-bench.txt:296299: parsing iteration count: invalid syntax
baseline-bench.txt:565400: parsing iteration count: invalid syntax
baseline-bench.txt:898743: parsing iteration count: invalid syntax
baseline-bench.txt:1157365: parsing iteration count: invalid syntax
baseline-bench.txt:1471679: parsing iteration count: invalid syntax
benchmark-results.txt:264: parsing iteration count: invalid syntax
benchmark-results.txt:342451: parsing iteration count: invalid syntax
benchmark-results.txt:672899: parsing iteration count: invalid syntax
benchmark-results.txt:977316: parsing iteration count: invalid syntax
benchmark-results.txt:1290304: parsing iteration count: invalid syntax
benchmark-results.txt:1620821: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ baseline-bench.txt │       benchmark-results.txt        │
                            │       sec/op       │    sec/op     vs base              │
InterpreterCreation-4               6.969m ± 55%   8.390m ± 63%       ~ (p=0.818 n=6)
ComponentLoad-4                     3.687m ± 14%   3.587m ±  1%  -2.71% (p=0.004 n=6)
ComponentExecute-4                  1.991µ ±  1%   1.952µ ±  1%  -1.96% (p=0.002 n=6)
PoolContention/workers-1-4          1.104µ ±  1%   1.087µ ±  1%  -1.50% (p=0.026 n=6)
PoolContention/workers-2-4          1.107µ ±  2%   1.086µ ±  1%  -1.85% (p=0.045 n=6)
PoolContention/workers-4-4          1.113µ ±  1%   1.094µ ±  3%       ~ (p=0.065 n=6)
PoolContention/workers-8-4          1.104µ ±  1%   1.097µ ±  1%       ~ (p=0.123 n=6)
PoolContention/workers-16-4         1.121µ ±  2%   1.094µ ±  3%  -2.41% (p=0.041 n=6)
ComponentLifecycle-4                3.634m ±  1%   3.664m ±  2%  +0.80% (p=0.026 n=6)
SourceValidation-4                  2.352µ ±  2%   2.367µ ±  1%       ~ (p=0.331 n=6)
RegistryConcurrent-4                809.3n ±  3%   846.8n ±  3%  +4.63% (p=0.004 n=6)
LoaderLoadFromString-4              3.638m ±  1%   3.667m ±  1%  +0.80% (p=0.026 n=6)
geomean                             18.96µ         19.16µ        +1.04%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.623 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.729 n=6)
ComponentExecute-4                  1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4         1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                2.183Mi ± 0%   2.183Mi ± 0%       ~ (p=0.937 n=6)
SourceValidation-4                  1.984Ki ± 0%   1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                1.133Ki ± 0%   1.133Ki ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4              2.182Mi ± 0%   2.182Mi ± 0%       ~ (p=0.121 n=6)
geomean                             15.25Ki        15.25Ki       +0.00%
¹ all samples are equal

                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │     allocs/op      │  allocs/op   vs base                │
InterpreterCreation-4                15.68k ± 0%   15.68k ± 0%       ~ (p=1.000 n=6)
ComponentLoad-4                      18.02k ± 0%   18.02k ± 0%       ~ (p=1.000 n=6)
ComponentExecute-4                    25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4           25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                 18.07k ± 0%   18.07k ± 0%       ~ (p=1.000 n=6) ¹
SourceValidation-4                    32.00 ± 0%    32.00 ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                  2.000 ± 0%    2.000 ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4               18.06k ± 0%   18.06k ± 0%       ~ (p=1.000 n=6) ¹
geomean                               183.3         183.3       +0.00%
¹ all samples are equal

pkg: github.com/GoCodeAlone/workflow/middleware
                                  │ baseline-bench.txt │       benchmark-results.txt       │
                                  │       sec/op       │   sec/op     vs base              │
CircuitBreakerDetection-4                  285.6n ± 0%   297.0n ± 8%       ~ (p=0.327 n=6)
CircuitBreakerExecution_Success-4          21.57n ± 0%   21.50n ± 0%  -0.32% (p=0.006 n=6)
CircuitBreakerExecution_Failure-4          66.14n ± 1%   66.22n ± 0%       ~ (p=0.370 n=6)
geomean                                    74.13n        75.05n       +1.25%

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │        B/op        │    B/op     vs base                │
CircuitBreakerDetection-4                 144.0 ± 0%     144.0 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │     allocs/op      │ allocs/op   vs base                │
CircuitBreakerDetection-4                 1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │       sec/op       │    sec/op     vs base              │
JQTransform_Simple-4                     877.5n ± 32%   865.1n ± 30%       ~ (p=0.180 n=6)
JQTransform_ObjectConstruction-4         1.452µ ±  0%   1.462µ ± 22%  +0.65% (p=0.011 n=6)
JQTransform_ArraySelect-4                3.361µ ±  1%   3.367µ ±  1%       ~ (p=0.621 n=6)
JQTransform_Complex-4                    38.62µ ±  1%   38.30µ ±  1%  -0.84% (p=0.041 n=6)
JQTransform_Throughput-4                 1.791µ ±  1%   1.789µ ±  1%       ~ (p=0.626 n=6)
SSEPublishDelivery-4                     63.63n ±  0%   63.44n ±  1%       ~ (p=0.251 n=6)
geomean                                  1.631µ         1.626µ        -0.31%

                                 │ baseline-bench.txt │        benchmark-results.txt         │
                                 │        B/op        │     B/op      vs base                │
JQTransform_Simple-4                   1.273Ki ± 0%     1.273Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4       1.773Ki ± 0%     1.773Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4              2.625Ki ± 0%     2.625Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                  16.22Ki ± 0%     16.22Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4               1.984Ki ± 0%     1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │     allocs/op      │ allocs/op   vs base                │
JQTransform_Simple-4                     10.00 ± 0%     10.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4         15.00 ± 0%     15.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4                30.00 ± 0%     30.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                    324.0 ± 0%     324.0 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4                 17.00 ± 0%     17.00 ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │       sec/op       │    sec/op     vs base              │
SchemaValidation_Simple-4                    1.115µ ± 5%   1.162µ ± 14%  +4.26% (p=0.022 n=6)
SchemaValidation_AllFields-4                 1.671µ ± 5%   1.717µ ±  5%       ~ (p=0.093 n=6)
SchemaValidation_FormatValidation-4          1.589µ ± 4%   1.646µ ±  2%  +3.56% (p=0.015 n=6)
SchemaValidation_ManySchemas-4               1.805µ ± 4%   1.844µ ±  3%       ~ (p=0.195 n=6)
geomean                                      1.520µ        1.569µ        +3.17%

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │        B/op        │    B/op     vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │     allocs/op      │ allocs/op   vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │       sec/op       │    sec/op     vs base               │
EventStoreAppend_InMemory-4                1.130µ ± 39%   1.152µ ± 12%        ~ (p=0.699 n=6)
EventStoreAppend_SQLite-4                  1.472m ±  5%   1.321m ±  7%  -10.25% (p=0.004 n=6)
GetTimeline_InMemory/events-10-4           13.89µ ±  4%   13.60µ ±  1%   -2.10% (p=0.002 n=6)
GetTimeline_InMemory/events-50-4           77.23µ ± 12%   75.75µ ±  2%        ~ (p=0.065 n=6)
GetTimeline_InMemory/events-100-4          124.0µ ±  1%   153.0µ ±  2%  +23.38% (p=0.002 n=6)
GetTimeline_InMemory/events-500-4          635.0µ ±  2%   750.7µ ± 17%        ~ (p=0.394 n=6)
GetTimeline_InMemory/events-1000-4         1.293m ±  1%   1.282m ±  1%   -0.85% (p=0.009 n=6)
GetTimeline_SQLite/events-10-4             108.4µ ±  2%   113.9µ ±  1%   +5.09% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             251.3µ ±  0%   254.1µ ±  0%   +1.13% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            429.3µ ±  2%   415.6µ ±  0%   -3.20% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.818m ±  1%   1.768m ±  2%   -2.73% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.526m ±  1%   3.452m ±  0%   -2.10% (p=0.002 n=6)
geomean                                    221.1µ         225.1µ         +1.84%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                 775.5 ± 10%     808.5 ± 6%       ~ (p=0.818 n=6)
EventStoreAppend_SQLite-4                 1.984Ki ±  1%   1.981Ki ± 2%       ~ (p=1.000 n=6)
GetTimeline_InMemory/events-10-4          7.953Ki ±  0%   7.953Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4          46.62Ki ±  0%   46.62Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4         94.48Ki ±  0%   94.48Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4         472.8Ki ±  0%   472.8Ki ± 0%       ~ (p=0.636 n=6)
GetTimeline_InMemory/events-1000-4        944.3Ki ±  0%   944.3Ki ± 0%       ~ (p=0.688 n=6)
GetTimeline_SQLite/events-10-4            16.74Ki ±  0%   16.74Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4            87.14Ki ±  0%   87.14Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4           175.4Ki ±  0%   175.4Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_SQLite/events-500-4           846.1Ki ±  0%   846.1Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_SQLite/events-1000-4          1.639Mi ±  0%   1.639Mi ± 0%       ~ (p=0.165 n=6)
geomean                                   67.24Ki         67.47Ki       +0.34%
¹ all samples are equal

                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │     allocs/op      │  allocs/op   vs base                │
EventStoreAppend_InMemory-4                  7.000 ± 0%    7.000 ± 0%       ~ (p=1.000 n=6) ¹
EventStoreAppend_SQLite-4                    53.00 ± 0%    53.00 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-10-4             125.0 ± 0%    125.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4             653.0 ± 0%    653.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4           1.306k ± 0%   1.306k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4           6.514k ± 0%   6.514k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-1000-4          13.02k ± 0%   13.02k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-10-4               382.0 ± 0%    382.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4              1.852k ± 0%   1.852k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4             3.681k ± 0%   3.681k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4             18.54k ± 0%   18.54k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-1000-4            37.29k ± 0%   37.29k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                     1.162k        1.162k       +0.00%
¹ all samples are equal

Benchmarks run with go test -bench=. -benchmem -count=6.
Regressions ≥ 20% are flagged. Results compared via benchstat.

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.

2 participants