Repository navigation
feat(aws-startup-advisor): add credits and Azure plans - #459
herosjourney wants to merge 7 commits into
Conversation
|
Reviewed. Good to go. |
shrugninreddy-hash
left a comment
There was a problem hiding this comment.
Two blocking issues, details inline: Azure plan.json can't be imported yet because ImportPlan doesn't accept AZURE, and the $1,500 figure doesn't match the web page or the plugin's own end-of-run copy.
leon1418
left a comment
There was a problem hiding this comment.
[🤖 AI review 🤖]
Two lifecycle issues remain at 92a22769: an interrupted advisor delegation can overwrite its provider state, and an interrupted LLM assessment can repeat the one-time offer. Details inline.
Validation: original-source state/marker probes, plus reverified passing results for the unchanged head (401 Python tests, 57 Node tests and the plugin lint checks).
Restore Azure PLAN_SKIP until importer support is confirmed, replace fixed migration-credit amounts with qualification language, and preserve advisor/LLM retry state across interruptions. Verification: - uv run --no-project --with pytest python -m pytest tests/test_decision_gate_wiring.py tests/test_emit_plan_json.py -q: PASS (21 passed) - python3 tools/sync-vendored.py --check: PASS (52 files) - Azure fixture runtime probe: PASS (exit 0, PLAN_SKIP, no plan.json) - mise -C plugins/aws-startup-advisor run ci: PASS (401 passed; markdown, artifacts, parity, refs, model and Node checks passed) - set -o pipefail; mise run build 2>&1 | tail -80: PASS (markdown, manifests, spec, parity, gitleaks) - git diff --check: PASS - git diff --check upstream/main...HEAD: PASS
Scope advisor envelope creation to the no-state branch and initialize LLM assessment provider state in the preselected directory for both GCP and Azure. Verification: - targeted pytest: initial 1 failed/20 passed; fixed assertion; final 21 passed - startup-advisor CI: intermediate reference/fixture-anchor failures fixed; final 401 passed, markdown/artifacts/references/parity/Node/model checks passed - mise run build: passed (final rerun; markdown, manifests, spec, parity, gitleaks) - git diff --check: passed
leon1418
left a comment
There was a problem hiding this comment.
[🤖 AI review 🤖]
Rechecked d151214202754308ab9c4cc07bb38c3fd951332c. Both lifecycle concerns are fixed, and no additional verified source findings remain. Azure stays on PLAN_SKIP, its upfront upload notice is removed, and the remaining notices use qualification-based wording.
Validation: 401 Python tests, 57 Node tests, all registered plugin checks, and original-source state/marker probes passed. No live migration or upload was performed.
aws#458 (parse RDfA reports into Discover) merged into main while this branch's prior 'Azure's active skill guidance now matches Discover' commit still described RDfA as an unsupported, halting input. Both descriptions can no longer be true at once. Reconcile by keeping this branch's real fixes (billing exports correctly described as not implemented, Bicep/ARM halt behavior, the tightened Input Security framing, and the delegated-LLM initiated_by note folded into aws#458's new shared Step 0) while restoring RDfA as a supported, non-halting Discover input everywhere this branch had marked it unsupported: - azure-to-aws/SKILL.md: frontmatter description, build-status note, the live-first-discovery and discovery-budget-risk bullets, Input Security (RDfA moves back to the untrusted-but-supported input list; drops the RDfA-halts-if-only-source and RDfA-plus-other-source sentences), the .gitignore note, and the Sizing/Migration mode defaults. - azure-to-aws/references/phases/discover/discover.md: merge conflict resolved by keeping aws#458's refactored 'Shared Step 0' (used by both the RDfA and live-az pre-dispatch actions) and relocating this branch's initiated_by: LLM_TO_BEDROCK note into it. - Root plugins/aws-startup-advisor/README.md: two capability rows that listed RDfA alongside Bicep/ARM/billing-exports as unsupported. - tests/test_decision_gate_wiring.py: updated test_azure_skill_describes_only_implemented_discovery_sources to assert RDfA is present and described as supported, instead of absent/unsupported. Full suite: 475 passed. lint:vendored-parity (54 files), lint:skill-refs (1318 checked, 0 missing), lint:artifacts (81 checked, 0 errors), lint:consent-disclosure, and lint:md (SKILL.md, discover.md, README.md) all pass. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Reconciled with #458 (merged): What changed in the reconciliation commit:
Everything else from this PR (the upfront migration-credit notice, Validation after the merge + fix, on
|
|
@shrugninreddy-hash Thanks for flagging both integration boundaries. Product has confirmed two explicit decisions: we are keeping Azure |
Resolve README conflicts by retaining main's customer-supplied RDfA wording while preserving the PR's user-stated Azure spend baseline. Resolve Azure skill conflicts by retaining main's expanded discovery description and reapplying the PR's unsupported billing/Bicep/ARM and baseline guidance.
Problem
Migration-credit eligibility was surfaced only after a supported assessment completed, so users did not learn at the start of a migration that creating an assessment could qualify them for AWS Promotional Credits. The gap also applied to standalone LLM migrations, which received no upfront offer at all.
Azure had staged Estimate and Generate handoff scaffolding from #435, but the shared
plan.jsonproducer did not mapAZURE_TO_AWS. Eligible Azure assessments therefore ended inPLAN_SKIPand could not produce the file required by the AWS Startups Migrate upload flow.The first implementation also exposed lifecycle contradictions: delegated LLM runs could see both the infrastructure and LLM notices before
initiated_bywas durable, interrupted agent-advisor delegations could leave schema-invalid state that Resume could not route, and Azure's loaded skill disagreed with Discover about unsupported billing-export, RDfA, Bicep, and ARM inputs.Fix
Surface a one-time offer at the beginning of a Fresh Azure, GCP, or Heroku infrastructure/mixed assessment and at the beginning of a Fresh standalone full
llm-to-bedrockmigration. The approved product copy is:plan.jsonand link to AWS Startups Migrate for upload.plan.json.LLM_TO_BEDROCKsuppress the offer. The LLM Fresh path uses a once-only marker so an interrupted pre-initialization retry does not render it twice.AZURE_TO_AWStosourcePlatform: "AZURE"; the existing Estimate option A and Generate completion handoffs reveal the file and upload CTA only afterPLAN_OK.initiated_byacross delegation and making interrupted runs resumable.az, application code, direct consent-gated AI usage APIs, and user-stated Azure spend are supported inputs; billing exports and RDfA are not ingested, Bicep/ARM workspaces halt rather than price a partial estate, and an RDfA archive as the only source also halts.Scope
Fresh eligible Azure, GCP, and Heroku assessments show the offer before scanning or consent-gated source capture. Fresh standalone full LLM migrations show the LLM-specific no-plan version before delegated Discover. Existing runs and ineligible/delegated routes do not receive duplicate or misleading notices.
Azure activation intentionally keeps the existing producer contract narrow:
scope: "INFRA_ONLY"withawsMonthlyBasis: "BALANCED".scope: "FULL"only when both estimates have usable overall accuracy bands.PLAN_SKIP.PLAN_SKIP, does not createplan.json, and does not block migration completion.Implementation details for reviewers
LLM_TO_BEDROCKduring early initialization when entered by the LLM wrapper. Both can therefore suppress the provider notice before rendering.migration_id,last_updated,phases, andinitiated_by: "AGENT_ADVISOR", instead of relying on a marker-only JSON object. Discover recognizes and expands the delegated Fresh case without routing it through Resume.llm-to-bedrockremains absent fromSKILL_TO_PLATFORM; no LLM plan producer or final upload CTA was added.HANDOFF_OK, and Azure Generate invokes it only after its ownHANDOFF_OK. Both preservePLAN_OK/PLAN_SKIPgating and fail-open completion behavior.External release dependency
Azure
plan.jsonproduction and the Azure upload CTA are intentionally enabled in this PR, but this does not mean live Azure import compatibility is available today. Merge/release of the Azure handoff is dependent on a coordinated external AWS Startups MigrateImportPlanupdate that acceptssourcePlatform: "AZURE". The external importer is outside this repository and was not exercised by this PR; repository tests validate producer output only. Do not release the Azure CTA until that importer support is confirmed deployed.The exact $1,500 AWS Promotional Credits sentence quoted above is approved product copy for this plugin and intentionally remains more specific than the linked page current qualification-only wording.
Final eligibility determined by AWS.is required and retained.Validation
Final copy validation on commit
37b1701c0764d1212de11c72ae3326347d350dc1:PLAN_OK/fail-openPLAN_SKIP, lifecycle, notice-ordering, and handoff checks passed.git diff --check upstream/main...HEADpassed with no whitespace errors.The external AWS Startups Migrate importer was not exercised. Repository validation confirms producer output, including the product-approved
sourcePlatform: "AZURE"value and supported scope behavior; live importer compatibility remains an external integration boundary.Type of Change
Startup Advisor review checklist
By submitting this PR, I confirm that:
mise -C plugins/aws-startup-advisor run ciand all checks pass.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.