Skip to content

Release v0.3.2#217

Merged
placerda merged 7 commits into
mainfrom
release/v0.3.2
May 31, 2026
Merged

Release v0.3.2#217
placerda merged 7 commits into
mainfrom
release/v0.3.2

Conversation

@placerda
Copy link
Copy Markdown
Contributor

Release v0.3.2

Automated release branch created from develop.

What happened

  • Branch release/v0.3.2 created from develop
  • CHANGELOG.md updated: versioned section [0.3.2] added
  • Plugin versions synced to 0.3.2 (package.json, plugin.json, marketplace.json)
  • Staging pipeline triggered automatically (build → TestPyPI + VSIX pre-release → verify)

Next steps

  1. Wait for the Staging pipeline to pass
  2. Review and approve this PR
  3. Merge to main
  4. Tag and push: git tag v0.3.2 && git push origin v0.3.2
  5. Approve the PyPI publish and VSIX stable publish in the Release workflow
  6. Sync develop: git checkout develop && git merge main && git push origin develop

Checklist

  • Staging pipeline passes (build + TestPyPI + VSIX pre-release + verify)
  • CHANGELOG entries reviewed
  • PR approved and merged to main
  • Tag v0.3.2 pushed
  • PyPI publish approved
  • VSIX stable publish approved
  • develop synced from main

placerda and others added 7 commits May 29, 2026 17:47
step 12 of the prompt-agent tutorial and step 5 of the end-to-end

tutorial only document the workflow-skill path. The 'if you used the

workflow skill' framing in the next step's callout therefore suggested

an alternative wired-by-hand path that does not exist in the tutorial.

Both callouts now state the skill's outcome directly. The redundant

git add/commit/push and gh workflow run blocks have been removed --

the skill already triggers the first run. A small gh run list /

gh run watch snippet remains as an opt-in way to wait on the run from

the terminal instead of the Actions UI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The skip-if-skill callout in step 13 of the prompt-agent tutorial

claimed the workflow skill triggered a first verification run of

both agentops-pr.yml AND agentops-deploy-dev.yml. That over-claims:

- agentops-pr.yml triggers on pull_request or workflow_dispatch. The

  skill dispatches it as a sanity check, which is the verification run

  step 13 expects users to see in the Actions tab.

- agentops-deploy-dev.yml triggers on push to develop (or

  workflow_dispatch). The skill does not dispatch it. The first real

  run happens at the end of the section, after the user merges the

  baseline PR into the trunk branch.

The callout now mentions only agentops-pr.yml and explicitly tells

the reader that the deploy-dev run will fire later, on the merge.

Also moves the PR #210 changelog entry from [0.3.1] (already

released) to [Unreleased] where it belongs, and folds the correction

into the same entry.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fixes 8 procedural bugs found during a parallel code-review pass over all three tutorials, after the PO hit a confidence-breaking inconsistency in a live recording. See CHANGELOG entry for the full bug-by-bug rationale.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…nd deploy-dev workflows (#213)

The workflow skill in tutorial step 12 actually dispatches *both*
agentops-pr.yml and agentops-deploy-dev.yml via workflow_dispatch as
its end-to-end CI wiring verification, after asking the user to
approve per SKILL.md rule #14. PR #211 narrowed this to `PR workflow
only` based on incorrect reasoning about push: triggers (the deploy
template's push: trigger is develop, but workflow_dispatch works
against any branch regardless). A live tutorial recording proved both
runs actually fire end-to-end.

Step 13 now:

- Says the skill dispatched both agentops-pr.yml and agentops-deploy-dev.yml.
- Explains the expected outcome (both may exit threshold_failed exit 2
  on first contact with an empty dev project because bootstrap creates
  a fresh travel-agent:1 unmeasured against seed thresholds  by
  design, not a CI wiring failure).
- Updates 'What you should see in the first PR workflow run' away from
  the `dev is still empty` assumption (no longer true after the
  skill's verification dispatch) to the three possible outcomes
  reused/created/bootstrapped you can actually see.
- Reframes the merge-triggered deploy as the *second* deploy-dev run,
  not the first.

Co-authored-by: Paulo Lacerda <paulolacerda@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…#215)

The example JSON in step 13 previously showed action: bootstrapped
with candidate_agent: travel-agent:1 and an explanation that the two
version numbers are expected to differ until the environment has
caught up to the seed. In practice the merge-triggered deploy is
almost never the run that bootstraps  by the time the user reaches
step 13, the skill's verification dispatch in step 12 plus the first
PR run have already settled dev to travel-agent:2, so the merge
deploy reports action: reused with candidate_agent: travel-agent:2
matching source_agent.

The example now:

- shows the steady-state shape taken from a real recording,
- uses runner-resolved absolute paths the user actually sees
  /home/runner/work/<your-repo>/...,
- uses a real 64-char prompt_sha256 and a real ISO timestamp.

The three-outcome list reused / created / bootstrapped below the
JSON keeps the bootstrap case as the documented edge condition.

Co-authored-by: Paulo Lacerda <paulolacerda@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…compatibility (#216)

The `created` action path of `prompt_deploy stage` was producing an invalid
request body against azure-ai-projects 2.x because:

1. `_copy_definition` called `.copy()` on the typed `PromptAgentDefinition`
   returned by `get_version`. In SDK 2.x that returns a stripped base
   `Model` whose JSON shape is `{"_data": {...}}` instead of the flat
   payload the Foundry Agents service expects.
2. `_create_agent_version` also wrote `kind` at the body root via
   `definition.get("kind")` — but the post-`.copy()` model returned
   `None` for that key, AND the new API treats `kind` strictly as the
   polymorphic discriminator inside `definition`.

The combined effect was a request body like
`{"kind": null, "definition": {"_data": {"kind": "prompt", ...}}, ...}`,
which the service rejected with
'invalid_payload — Required properties ["kind"] are not present'.

This regression only fired on the `created` path (user changed the prompt
relative to the seed). The `reused` and bootstrap paths never round-trip
the typed model through `.copy()`, so they were unaffected.

Fix:
- New `_definition_to_dict` helper accepts dicts, typed SDK models with
  `_data`, mapping-like objects with `.items()`, or anything with
  `as_dict()`.
- `_copy_definition` now always returns a deep-copied plain dict.
- `_create_agent_version` drops the root-level `kind` from the body and
  sends a clean `{definition, metadata, description}` shape.

Verified locally: serialization of a real `PromptAgentDefinition` (2.2.0)
through the fixed path produces the expected flat shape with `kind`
inside `definition`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@placerda placerda merged commit 336e738 into main May 31, 2026
5 checks passed
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.

1 participant