Skip to content

feat(studio): scaffold package and isolated CI validation - #4195

Open
Yuvraj Singh (yuvrajsingh2428) wants to merge 5 commits into
microsoft:mainfrom
yuvrajsingh2428:feat/agt-studio-scaffold
Open

Yuvraj Singh (yuvrajsingh2428) wants to merge 5 commits into
microsoft:mainfrom
yuvrajsingh2428:feat/agt-studio-scaffold

Conversation

@yuvrajsingh2428

Copy link
Copy Markdown
Contributor

Summary

Closes #3898

This PR adds the initial AGT Studio package boundary and isolated CI validation required for the Studio implementation sequence.

Changes
Added the new agent-governance-studio/ package.
Added the Python distribution agent-governance-studio with import package agent_governance_studio.
Added the @microsoft/agent-governance-studio React 18 frontend using TypeScript, Vite, TanStack Query, and Tailwind.
Added Python and frontend smoke tests.
Added exact frontend dependency versions and committed package-lock.json.
Extended the existing CI workflow with path-filtered Studio validation.
Added Python lint, test, and wheel/sdist build validation.
Added frontend install, lint, test, and production build validation.
Added Studio Dependabot configuration with weekly updates and 7-day cooldown.
Added explicit Studio CODEOWNERS coverage.
Added package-local ignore rules and README documentation.
Validation

The following commands pass locally:

python -m build agent-governance-studio
python -m pytest agent-governance-studio/tests -q
ruff check agent-governance-studio/src agent-governance-studio/tests --select E,F,W --ignore E501

npm ci --prefix agent-governance-studio/web
npm run lint --prefix agent-governance-studio/web
npm test --prefix agent-governance-studio/web
npm run build --prefix agent-governance-studio/web
Scope

This PR intentionally stays within the scaffold defined by #3898.

Sidecar implementation, launcher/CLI commands, transport abstractions, generated client, Engine API integration, product UI, and publishing workflow changes are deferred to their dedicated issues.

@github-actions github-actions Bot added size/XL Extra large PR (500+ lines) documentation Improvements or additions to documentation dependencies Pull requests that update a dependency file tests scripts/ci/cd labels Sep 29, 2026
@github-actions

Copy link
Copy Markdown

PR Review Summary

Check Status Details
🔍 Code Review ⚠️ Missing No current-run comment
🛡️ Security Scan ⚠️ Missing No current-run comment
🔄 Breaking Changes ⚠️ Missing No current-run comment
📝 Docs Sync ⚠️ Missing No current-run comment
🧪 Test Coverage ⚠️ Missing No current-run comment

Verdict: ⚠️ AI review incomplete; ready for human review

AI review comments are untrusted advisory output. The summary reports workflow-generated completion status only, not model-authored pass/fail claims.

@MohammadHaroonAbuomar MohammadHaroonAbuomar left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

  • Thank you for following through on the claim you made on #3898 on 09-08, which Ricky-G encouraged on 09-23. I compared this against #4170, which targets the same issue: the two are independent implementations (no shared file is identical; the common strings all come from the issue text), so there is no attribution question. #4170 was opened later by a maintainer, is fully reviewed and close to merge, and covers the same scope; which one lands is a maintainer call and I have flagged it to them with the claim history. Regardless of that, this branch cannot pass CI as committed, and I am holding the gated runs until the file problems below are fixed so they do not fail for mechanical reasons.
  • None of the three commits carries a Signed-off-by trailer, so the DCO Check will fail; please amend and force-push. The body does not use the repository template (Type of Change, Packages Affected, Checklist, Attribution & Prior Art, AI Assistance, IP), so the attestations are missing.
  • .github/CODEOWNERS:1 After the merge from main the new studio line sits above the catch-all * line; CODEOWNERS is last-match-wins, so the studio line is inert, and it omits Prayag (@prayagupa) who is now a global owner. .github/dependabot.yml adds a second standalone npm entry; main's npm block is a single multi-directory entry by design so one PR limit applies across the JavaScript workspace, so the new directory should join that block.
  • Supply chain: scripts/check_install_scripts.py --strict fails on fsevents@2.3.3 and the CI job runs npm ci without --ignore-scripts; a lockfile change also needs a docs/dependency-audits/2026-09-29-<desc>.md for the Dependency Audit Trail gate and the package names registered in scripts/check_dependency_confusion.py. #4170 had to add all three. The lockfile itself is well-formed (every entry resolved from the public registry with sha512, integrity verified, no known vulnerabilities), which is good.
  • Smaller items against #3898's acceptance criteria: no LICENSE or MANIFEST.in in the package, no CI gate that fails when the tests are skipped or no-op, a single Python test; jsdom and eslint-plugin-react-refresh are declared but unused; package.json lacks private: true and engines.

Comment thread agent-governance-studio/pyproject.toml Outdated
Comment thread agent-governance-studio/README.md Outdated
@yuvrajsingh2428

Copy link
Copy Markdown
Contributor Author

MohammadHaroonAbuomar
The branch is currently based on the latest main, and I verified locally that HEAD merges cleanly with origin/main using git merge-tree --write-tree.
I also refreshed the PR with a new commit, but GitHub is still reporting the same conflict set and skipping the required CI checks.
I have not made any further changes to the listed files since they are not actual conflicts locally.

@MohammadHaroonAbuomar

Copy link
Copy Markdown
Collaborator

The branch is not based on current main; the rebase replayed main's history as new commits. Measured on the current head: the merge-base with main is still 46463ef from 2026-08-25, the branch is 318 commits ahead of main, and 314 of those commits are copies of commits that already exist on main (same subjects, re-signed under your name at 17:07). The diff against main therefore touches 1,142 files, which is why GitHub reports conflicts and will not run CI. Locally git merge-tree passes only because the replayed copies happen to produce the same trees.

The fix is mechanical: reset the branch to origin/main and cherry-pick only your own commits (the scaffold, the merge-fix and the two file-repair commits, four by my count), then force-push. After that the diff will be your 22 files again and the gated runs will start. The file repairs you described (pyproject line breaks, README fences, BOM) will be reviewed once the branch is readable again; I cannot verify them in a 1,142-file diff.

@yuvrajsingh2428

Copy link
Copy Markdown
Contributor Author

MohammadHaroonAbuomar Ready from my side. I’ve made the requested changes and rebuilt the branch on top of the current main, keeping only the Studio changes as discussed.

The CODEOWNERS conflict has also been resolved with the required owners. The PR is ready for another review.

@MohammadHaroonAbuomar MohammadHaroonAbuomar left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

  • The branch history is fixed: two commits on current main, 22 files, and the feature commit is signed off. Thank you for that. But the Studio tree is byte-identical to the version I reviewed on 09-29 (git rev-parse <head>:agent-governance-studio gives the same tree id at 1453d97, 7d3695b and 45089f2), so none of the repairs described in your replies are in the PR: pyproject.toml is still one 901-byte line that TOML parses as a comment (tomllib.load returns an empty document, and python -m build quietly produces agent_governance_studio 0.0.0 with empty metadata), README.md still has the backspace and bell characters at lines 22, 30 and 39, and .gitignore still starts with a BOM. It looks like the cherry-pick took only the original scaffold commit. Please check your local branch for the repair commits and push them.
  • Everything else from the 09-29 review is unchanged and still applies: the repository template with attestations; dependabot.yml joining main's multi-directory npm block instead of a standalone entry; npm ci --ignore-scripts in the CI job plus the install-script result for fsevents; a docs/dependency-audits/ document for the lockfile and registration of the seven unregistered package names in scripts/check_dependency_confusion.py; the five toolchain words for .cspell-repo-terms.txt (Spell Check will fail on tseslint, autoprefixer, vite, vitejs); LICENSE and MANIFEST.in in the package, a test gate against skipped or no-op runs, private: true and engines in package.json, and the unused jsdom and eslint-plugin-react-refresh. One new item: the build-studio job's pytest step runs from the repository root without installing the package or setting a path, so it will fail with ModuleNotFoundError as written; #4170 installs the built wheel into a venv first.
  • For the maintainers' comparison, #4170 by Ricky-G covers the same issue and already has: a parsable pyproject, clean text files, the audit document, scanner registration, dictionary terms, LICENSE and MANIFEST.in, a wheel-content check and a tests-executed gate in CI, --ignore-scripts, a correct CODEOWNERS line and dependabot block, and private/engines. I am keeping the request-changes here; which scaffold lands remains their decision.

Comment thread .github/CODEOWNERS Outdated

@MohammadHaroonAbuomar MohammadHaroonAbuomar left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

  • Register the five npm names the dependency-confusion scan still rejects (check_dependency_confusion.py --strict exits 1): @tanstack/react-query, @eslint/js, @vitejs/plugin-react, typescript-eslint, vite.
  • The build-studio pytest step in .github/workflows/ci.yml runs python -m pytest agent-governance-studio/tests from the repo root without installing the package, so it fails with ModuleNotFoundError: agent_governance_studio. Install the package first (for example pip install -e agent-governance-studio).
  • Add LICENSE and MANIFEST.in to the package so the sdist carries them, as asked earlier.
  • Make the studio test step fail when the suite is skipped or collects nothing, as asked earlier.
  • Branch history regressed: origin/main..head is now four commits, including a merge of upstream/main without a sign-off, and the scaffold commit is still rooted on 2026-08-25 main. Please reset the branch to current main and cherry-pick your two changes so the PR is two signed commits.
  • Please fill the repository PR template (Type of Change, Packages Affected, Checklist, Attribution, AI Assistance, IP sections) in the description.

Comment thread agent-governance-studio/README.md Outdated
Comment thread docs/dependency-audits/2026-09-29-agent-governance-studio-package-lock.md Outdated
Signed-off-by: yuvrajsingh2428 <offcyuvi2428@gmail.com>
Signed-off-by: yuvrajsingh2428 <offcyuvi2428@gmail.com>
Signed-off-by: yuvrajsingh2428 <offcyuvi2428@gmail.com>

@MohammadHaroonAbuomar MohammadHaroonAbuomar left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

  • Please fill the repository PR template in the description (Type of Change, Packages Affected, Checklist, Attribution, AI Assistance, IP sections).

Comment thread scripts/check_dependency_confusion.py Outdated
Comment thread .github/workflows/ci.yml
Signed-off-by: yuvrajsingh2428 <offcyuvi2428@gmail.com>

@MohammadHaroonAbuomar MohammadHaroonAbuomar left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

  • Please fill the repository PR template in the description (Type of Change, Packages Affected, Checklist, Attribution, AI Assistance including the autonomous-submission attestation, IP). The body still has only Summary, Changes, Validation and Scope.

"agent-governance-toolkit-cli", "agent_governance_toolkit_cli",
"agent-governance-toolkit-protocols", "agent_governance_toolkit_protocols",
# Core packages (on PyPI) — both hyphen and underscore variants
# Core packages (on PyPI) — both hyphen and underscore variants

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

scripts/check_dependency_confusion.py:40 Three comment lines are still re-encoded: lines 40, 79 and 138 read — where main has — (the BOM and line 670 are fixed, and the strict scan now passes). git diff origin/main -- scripts/check_dependency_confusion.py should show only the five new registrations; restoring those three lines from main does it.

Signed-off-by: yuvrajsingh2428 <offcyuvi2428@gmail.com>

@MohammadHaroonAbuomar MohammadHaroonAbuomar left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

  • Please fill the repository PR template in the description (Type of Change, Packages Affected, Checklist, Attribution, AI Assistance including the autonomous-submission attestation, IP). The body still has only Summary, Changes, Validation and Scope.

BASE_REF: ${{ github.event.pull_request.base.ref }}
run: |
python3 scripts/check_install_scripts.py --base "origin/${BASE_REF}" --strict
python3 scripts/check_install_scripts.py --base "origin/${BASE_REF}" --strict --max-deps 0 --total-deadline-sec 300 --allow fsevents

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

.github/workflows/supply-chain-check.yml:188 Please revert this commit. It disables the install-script audit cap (--max-deps 0) and allow-lists fsevents in the same PR that adds the dependencies the audit would scan. The scanner trip-wire in this workflow fails any PR that changes both the supply-chain tooling and dependency manifests, so this head cannot pass CI, and the cap and the allow-list are maintainer decisions that are being handled separately (#4151). Leave the workflow untouched; the audit failure on this PR is a known maintainer-side blocker, not something to fix here.

"agent-governance-toolkit-cli", "agent_governance_toolkit_cli",
"agent-governance-toolkit-protocols", "agent_governance_toolkit_protocols",
# Core packages (on PyPI) — both hyphen and underscore variants
# Core packages (on PyPI) — both hyphen and underscore variants

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

scripts/check_dependency_confusion.py:40 Three comment lines are still re-encoded: lines 40, 79 and 138 read — where main has —. Restoring those three lines from main leaves only the five new registrations in the diff.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation scripts/ci/cd size/XL Extra large PR (500+ lines) tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AGT Studio: package + CI scaffold + CODEOWNERS (Epic 1a, issue 5/32)

2 participants