Slack to Teams · GitHub Copilot migration demonstrations
Move the application. Preserve the business rules.
A repeatable, evidence-led way to investigate Slack applications and build reviewed Teams equivalents with GitHub Copilot. Review the source first, preserve the business service, then compare native interactions, private responses, state and audit.
Native Slack and Teams · synthetic examples
See the migration, not just a generated app.
Six workflows were exercised in the actual Slack and Teams web clients. The paired screenshots show the source and target interfaces; recorded behaviour, state and audit establish the outcomes.
Commands, approvals, a redesigned App Home, an HTTP integration and a native dialog. Different Teams experiences, with the business decisions kept in the original services.
All scenarios and business data are synthetic. A seventh notification example failed acceptance and is not counted as migrated. Images are reviewed crops/redactions of genuine client captures, not mock-ups.
A repeatable approach · reviewed boundaries
Investigate. Generate. Verify.
Copilot reads scoped source, surfaces questions and builds the reviewed Teams adapter. Independent checks compare the result with the original behaviour; failed checks feed bounded repairs instead of becoming a success claim.
Documentation, not a product release. A community project built with GitHub Copilot and shared under the MIT licence; not a Microsoft product or supported by Microsoft. This public repository contains the website and case studies only. Toolkit source, ZIP, generated apps and private evidence remain private.
A reusable developer preview, not a turnkey installer. Engineers still supply source contracts, acceptance cases, identity mappings and authenticated hosting. Read the prerequisites and exact-release test evidence; a local pass is not deployment approval.
Twelve reviewed native views, paired by application. Select any image for its original-size crop. Quoted account references in the Teams policy and reservation images are visibly redacted. Screenshots illustrate interfaces; the recorded behaviour, state and audit checks establish outcomes. They do not prove a different generated revision is deployed.
Showing 6 examples.
01
LIVE DEMO / COMMAND + APPROVALS
Maintenance approvals
A request-to-decision workflow with role checks, repeated actions and conflicting-decision protection.
Slack
Request command and shared approval card.
Teams
Native command, Adaptive Cards and correctly targeted private responses.
Unchanged domain service. Matching recorded state and audit. Local replay: 8 scenarios / 42 steps.
Slack — sourceThe original pending maintenance request and its Approve / Reject actions. Historical live capture: 2026-09-23.Teams — migrated targetThe same synthetic MR-1 request exposed through a native Teams Adaptive Card. Historical live capture: 2026-09-23.
What the migration taught us
Native Teams slash commands can carry targeted thread context. Private responses need the trusted channel-root reference. Those lessons became reusable checks instead of being rediscovered for every bot.
02
LIVE DEMO / PRIVATE LOOKUP
Policy lookup
Versioned, approved policy answers with explicit refusals for unknown or retired topics.
Slack
Private /policy responses.
Teams
Native command with the same private answer contract.
3 live operations per platform. Local replay: 6 scenarios / 18 transport-variant steps.
Slack — sourceA private Slack response containing the approved returns policy and its version. Historical live capture: 2026-09-24.Teams — migrated targetThe same versioned policy text in a private Teams response. The quoted account reference is redacted. Historical live capture: 2026-09-24.
What was preserved
The original domain text, topic handling, access decisions and refusal messages. The bot does not call a language model to invent policy answers at runtime.
03
LIVE DEMO / CONTROLLED LIFECYCLE
Delivery exceptions
Inspect, escalate and resolve an exception without bypassing role permissions or transition order.
Slack
Private lookup and Escalate / Resolve actions.
Teams
Native command and private Adaptive Card actions.
5 main-flow live operations per platform plus an employee-role phase. Local replay: 7 scenarios / 39 steps.
Slack — sourceSlack actions show transition-order refusal, escalation, resolution and a repeated-action response. Historical live capture: 2026-09-24.Teams — migrated targetTeams preserves the same sequence and private results, including the already-resolved acknowledgement. Historical live capture: 2026-09-24.
A useful failed draft
The model initially reused a public-card pattern from another example. Exact visibility checks rejected it. The corrected target restored the source's private behaviour; visual similarity alone would not have caught the problem.
04
LIVE DEMO / INTENTIONAL UX REDESIGN
Manager approvals dashboard
The source was reviewed inside Slack before its interface was redesigned for a Teams personal tab.
Slack
A stacked App Home queue, status dropdown and separate rejection modal.
Matching live decisions and audit. Separate domain verifier: 12 scenarios / 14 steps, including spoofed client identity.
Slack — sourceThe original stacked App Home queue: four pending requests, a status filter and per-item actions. Historical live capture: 2026-09-24.Teams — migrated targetThe redesigned personal tab: the same four pending requests, search, counters and a detail panel. Historical live capture: 2026-09-24.
Redesign without rewriting policy
Self-approval and above-limit decisions remain refused. Rejections still require a reason. The UI changed; the original service remained responsible for every business decision. Historical access used explicitly demo-only short-lived links, not production SSO.
05
LIVE DEMO / API INTEGRATION
Stock reservations
An asynchronous HTTP-backed reservation workflow with actor-bound request keys, stock limits and safe retries.
Slack
Private /reserve responses using an authenticated synthetic HTTP backend.
Teams
Native /reserve command and private confirmations through the unchanged service.
Six live commands per platform. Three unique receipts; exact stock and audit parity. Local replay: 7 scenarios / 42 transport steps, plus real HTTP and concurrent-callback checks.
Slack — sourcePrivate Slack results show duplicate-key confirmation, rate-limit refusal, an unknown outcome and successful same-key retry. Historical live capture: 2026-09-24.Teams — migrated targetThe native Teams response honestly reports an unknown outcome. A subsequent same-key retry confirmed R-3 without a duplicate. The quoted account reference is redacted. Historical live capture: 2026-09-24.
When confirmation is lost after commit
A real delayed HTTP response produced an unknown-outcome message, not a false rollback. Retrying the same key confirmed the original reservation without another stock deduction. A separate real 429 required an explicit same-key retry. Both platforms used independent fresh backend instances with identical seed data; this is not a production inventory integration.
06
LIVE DEMO / SHORTCUT + DIALOG
Service-desk intake
A global shortcut and two-step Slack modal became a private launcher and native Teams dialog.
Slack
Global shortcut, title/category form, review step and private ticket confirmation.
Teams
/intake launcher, editable validation errors, review and private SD-1 confirmation.
Cancellation creates no ticket. The completed ticket and audit match Slack exactly. Local replay: 6 scenarios / 32 transport steps, with additional native client review.
Slack — sourceThe real Slack modal asks the user to review the hardware request before creating the ticket. Historical live capture: 2026-09-24.Teams — migrated targetThe migrated native Teams dialog shows the same review text and Submit request / Cancel actions. Historical live capture: 2026-09-24.
A deliberate platform difference
Explicit Cancel invokes the preserved service and bypasses required inputs. Teams X-close does not emit Slack's view_closed callback: no ticket is created, but the transient draft remains subject to its five-minute semantic expiry. This client shows the final result inside the dialog until Close is selected. Identical dialog cleanup is not claimed.
Additional coverage / two accepted, one stopped
More patterns. Including an honest failed result.
This separate GPT-5.4 mini batch tested an API integration, a multi-step intake flow, and event-driven notifications with a digest. Reservations and intake reached reviewed local acceptance and separate live Slack/Teams proof. Notifications did not.
Coverage batch — managed AI credits, including unsuccessful attempts
Application
Outcome
Assess
Clarify
Implement
Repair
Total
Reservations
Accepted; live Slack/Teams parity
7.61
3.27
39.74
8.04
58.659000
Service-desk intake
Accepted; live Slack/Teams parity
7.92
0
44.90
54.76
107.577315
Notifications / digest
Failed; further repairs declined; not hosted in Teams
11.28
0
42.25
32.74
86.271750
Managed total; original 1,000-credit ceiling unchanged
252.508065
A local pass was not enough. The notification source worked in Slack. Additional review then found that the Teams adapter bypassed the source service for unknown identity and empty input, inventing different refusal text. Its final approved repair introduced an SDK return-type compilation error. The operator declined another attempt; no generated code was hand-fixed, no Teams notification success is claimed, and all 86.27 credits remain in the ledger.
The two accepted apps total 166.236315 managed credits. This batch is separate from the earlier 198.358950-credit portfolio run. Coordinating conversation, kit/fixture/harness engineering, live testing and documentation are excluded and not assigned a zero cost. A vendor-without-source test also remained blocked without invoking a model.
Publication boundary: this public site and repository contain documentation and reviewed screenshots only. The two-recipe v0.2 toolkit, experimental extension code, source fixtures, generated apps and ZIP remain private.
Architecture of the private demonstration toolkit
A developer toolkit, not a hosted migration service.
The privately prepared toolkit contains a controller, source examples, recipes, checks and documentation for running a supported-pattern portfolio locally. The table documents that architecture; it is not a download offering. Reproducing the approach requires authorised source, an approved Copilot account and application-owner decisions.
Inside the privately prepared v0.2 kit
Component
What it does
Portfolio command-line runner
Imports app jobs, prepares separate workspaces, checks dependencies, saves progress, enforces review gates and resumes eligible work. This preview runs sequentially.
Copilot migration guidance
Versioned worker prompts and contracts for source assessment and implementation. A named custom agent is also included for the older single-app workflow; the portfolio runner is a separate Node application.
Two migration recipes
A command/action-bot recipe and a specific approval App Home-to-dashboard recipe. A recipe defines the expected source interface, target artifacts and independent checks; it is not a universal UI converter.
Teams SDK scaffold
A pinned bot package, TypeScript configuration, SDK bootstrap and manifest draft. The dashboard recipe supplies its target contract and theme. Tenant IDs, icons, URLs and hosting are not supplied as a deployable Teams package.
Five synthetic source apps
Stock lookup, maintenance approvals, policy lookup, delivery exceptions and manager approvals, with job definitions and acceptance data. Stock lookup is a local-replay example; the other four have documented historical live demonstrations.
Local verifiers and regression tests
Schema and input-integrity checks, SDK compilation, source/target callback replay, domain state/audit comparison and controller tests. Coverage is bounded by the supplied recipe and reviewed cases.
Metering and reporting
App/stage credit accounting, native usage reconciliation, budget admission, explicit retry overrides and private JSON/Markdown reports. Missing usage blocks new model work instead of being treated as free.
Documentation and publication assets
The operator guide, migration case studies, fresh-run cost evidence, this self-contained site, an allowlisted release packager, publication checklist and manually triggered GitHub Pages workflow.
No toolkit source, ZIP or ready-to-install Teams app is published here. This repository contains only the website and case-study documentation, including reviewed cropped screenshots. Original private captures, browser recordings, credentials, tenant registrations and the live demo host are excluded.
Compatibility before conversion
What can it migrate today?
Support is based on the application's source and behaviour, not just its name in Slack. The privately packaged v0.2 release has two recipe families: command/action bots and one approvals-dashboard contract. Both expect trusted JavaScript/Node source, a separable business service and reviewed acceptance cases.
Demonstrated does not mean bundled. The six live examples are historical evidence, not six ready-to-install templates. The stable ZIP contains five synthetic source fixtures and two recipes. The later reservations/intake work and unsuccessful notification extension are separate experiments; their extension code and fixtures are not in that ZIP.
Stable v0.2 compatibility — source adaptation and tenant setup are still required
Slack app or migration need
Shipped release status
Requirements and remaining work
Command-based lookup bots
Defined recipe; latest test failed
Node/Bolt-style command handlers have a generation/replay path, with private/public replies specified by the source cases. However, the fresh packaged-release policy test did not compile within four attempts. A recipe is not a guarantee of a usable generated app.
Command + button workflows
Supported contract
The bot recipe covers its defined command/action shape: for example maintenance decisions or delivery escalation, with Adaptive Cards, role checks, idempotency and observable state/audit.
Approval-style App Home
Specific recipe
The approval-domain list/decide contract can be redesigned as a personal-tab dashboard. This is not support for every App Home layout, modal or data model. A separately authenticated HTTP host is still needed.
Monolithic or different-framework apps
Engineering required
Inline business logic, Python, Java, .NET, Go or incompatible Node interfaces need a reviewed extraction/adapter or another recipe. v0.2 does not automatically normalise arbitrary repositories.
Other App Home interfaces, modals and shortcuts
New recipe or adapter
Arbitrary forms, layouts and multi-step interactions are not covered by the approvals recipe. A narrow two-step service-desk intake extension passed separate live testing, but that recipe and fixture are not included in the stable ZIP.
Events, notifications and scheduled digests
Not ready in this release
No shipped event/scheduler recipe. The experimental notification migration failed independent acceptance and its final repair did not compile; further repairs were stopped. It was not hosted in Teams. See the failed result and its cost.
HTTP APIs, databases and SaaS integrations
Integration-specific work
A compatible bot may reuse an existing backend, but engineers must supply authorised connectivity, secrets, API permissions and tests for failure, retry, rate limits and duplicate side effects. The live reservation example is separate coverage; its fixture is not shipped. The kit neither moves databases nor proves arbitrary live-backend parity.
Slack Workflow Builder / no-code workflows
No shipped converter
A workflow export is not the required Node source/service contract. Review its triggers, connectors, approvals and data separately, then select a Teams/Power Automate/vendor replacement or build a reviewed recipe.
Vendor apps without accessible source
Not source-convertible here
Use a vendor's Teams offering, an approved integration or another reviewed replacement path. Installed-app metadata is not access to the vendor's backend code.
Messages, channels, files and historical records
Not included
This is application-code migration, not workspace or message-history migration. Existing business-state transfer and directory/user migration are separate projects.
Production deployment and operations
Not included
No automatic Entra SSO, durable store, Azure provisioning, tenant consent, rollout, monitoring or rollback is provided. The preview does not turn a local pass into production approval.
The source contracts are intentionally narrow
The bot job requires domain.mjs, slack.mjs, an explicit identity map and command/action acceptance scenarios. The supplied replay instantiates createService(), registers registerSlackHandlers(app, { service }), invokes the command/action callbacks and compares synchronous snapshot() results. The service interface must match the reviewed source contract; merely having a Slack manifest or a Node project is not enough.
The Home recipe additionally expects synchronous list/decide execution with the reviewed approval service shape: request versions, requests/audit responses and trusted server-side actor handling. Its generated adapter is handleDashboard(service, actorId, input). An incompatible service needs another reviewed recipe rather than speculative conversion.
“Supported” means the pattern has a defined generation and verification path. It does not guarantee first-pass model success, complete business equivalence or production readiness. Unsupported entries are reported as blocked/manual-review/vendor-alternative work, not silently marked migrated.
Prerequisites / adoption readiness
Installable tooling. Not an automatic migration.
An engineer receiving the private kit can set up its supported local workflow. Installing it does not discover Slack apps, make arbitrary source compatible, or deploy a working Teams application. The public documentation repository cannot run the kit: it contains no toolkit source or ZIP.
Clean-folder testing is not a new-customer guarantee. The exact private release is tested separately from the development workspace, on the existing Windows workstation and approved Copilot account. A different user, clean machine, operating system and customer tenant still require their own pilot. See what was actually exercised.
Source and business evidence
Authorised application source, selected through a file allowlist; not a message export or just an installed-app list.
An app owner, criticality, declared capabilities and known dependencies.
Reviewed acceptance cases covering normal use, denied roles, privacy, invalid input, repeated actions and expected state changes.
Source UI review and owner explanations where code alone does not establish intended behaviour.
Local installation and access
Windows/PowerShell, Node.js 22+ and npm. Linux/macOS installation has not been accepted for this preview; some engine commands use Windows paths.
An approved GitHub Copilot account, compatible CLI and access to gpt-5.4-mini. This release does not silently select another model.
Network/proxy access to approved npm registries for dependencies and to the Copilot service for model work. Accounts, licences, credits and registry access are not bundled.
A reviewed credit allowance and attempt limit, a trusted execution environment, and an operator able to answer questions and inspect generated code.
A Slack workspace export is not application source. The kit does not connect to Slack and automatically discover, download and migrate every installed app. Inventory import and source preparation are operator-led. Source replay executes code, so never treat the local runner as a sandbox for unreviewed customer repositories or production credentials.
Dependencies change as you move from local artifacts to a live application
Stage
You must supply
What the kit does not supply
Install and run deterministic checks
The reviewed private package, Node/npm, package-registry access and trusted synthetic/source code.
No live Slack/Teams registration is required for local replay. Regression tests use synthetic data and some fake model responses; they do not establish model access or tenant readiness.
Investigate and generate
Compatible signed-in Copilot CLI, model access, credits, allowlisted source jobs, identity mappings, acceptance cases and reviewed owner decisions.
No source discovery, vendor-code retrieval or business-owner sign-off. CLI doctor checks required flags; it does not validate authentication, subscription entitlement or model availability.
Run a bot in Teams
Tenant/admin permission to register and install the app; appropriate Entra/bot registration; reviewed manifest IDs, icons and URLs; HTTPS hosting; authenticated bot messaging; secret storage and real identity mapping.
No Azure/tenant provisioning, installation, credential delivery or production rollout. A compiled SDK adapter and manifest draft are not a deployable, configured service.
Run a personal dashboard
A separately authenticated HTTPS host, TeamsJS asset and session/list/decision APIs; server-side identity and authorisation; appropriate tab configuration and independent UI checks.
The generated tab does not install that host or a browser-review harness. Synthetic one-use demo tickets are not production Entra SSO. Browser checks with intercepted APIs are not tenant authentication tests.
No business-data/history migration, comprehensive load testing, production operational handover or automatic acceptance. Each application's external services remain dependencies.
Exact CLI and Windows command requirements
The original release was checked against CLI 1.0.86; the current release test uses 1.0.89-3. Required options include --session-id, --usage-output-file, --max-ai-credits and the required tool/path restrictions. Run the supplied doctor command before paid work; later CLI or model-catalog changes must be checked rather than assumed compatible.
Use npm --prefix .\portfolio run migrate -- ..., not an arbitrary direct Node invocation: the Windows independent verifier needs npm's executable path. Paths after npm --prefix resolve from portfolio. Root dependency installation and generated-target dependency preparation disable lifecycle scripts. Generation still executes trusted source and verifier code.
Exact private release / 25 September 2026
Test the package. State the limits.
The readiness exercise starts from a fresh extraction of the actual private v0.2 ZIP, not the development workspace or an old generated app. All 65 manifest-listed files are checked against their original hashes. The archive and generated targets are not hand-patched to make the exercise pass.
Installation passed; fresh generation is not guaranteed. The new policy-bot target failed compilation after its initial implementation and three allowed repairs. The controller rejected it and did not mark it migrated. This is direct evidence against describing the current package as “install it and everything works”, even though earlier policy demonstrations succeeded.
Real GPT-5.4 mini generation from the unchanged ZIP — local artifacts only
Asset
Final outcome
What actually happened
Policy lookup bot
Verification failed
Four implementation attempts exhausted. The final generated SDK acknowledgement type did not compile. No passing target replay, acceptance or deployment was claimed.
Approvals dashboard
Accepted locally after two repairs
12 domain scenarios / 14 steps passed, including trusted-actor checks; then all 9 independent browser scenarios passed. Browser review rejected the first two revisions before local acceptance.
Whole two-asset portfolio
Incomplete, not an all-pass result
The completion command correctly returned nonzero because the policy bot failed. Resuming the accepted/exhausted jobs made zero new model invocations. The original ZIP and both source domains stayed unchanged.
The dashboard's first domain-level pass missed lost decision messages, incomplete clearing of private data, malformed records and a late-response expiry race. A model repair fixed those; a second fixed the remaining stuck busy state. The external browser harness used synthetic Teams context and intercepted HTTP, not a real tenant or production SSO. All failed and successful attempts are included in the cost ledger.
Fresh-folder setup and deterministic checks
Check
Observed result
Evidence boundary
Dependency installation
Passed with npm ci --ignore-scripts.
Existing Windows workstation, Node 24.14.0, npm 11.9.0. A new folder, not a clean machine or new user.
Packaged regression suites
18 engine + 19 portfolio checks passed.
Synthetic fixtures; some controller cases use fake model responses. This row is not evidence of new model generation or tenant deployment.
CLI preflight and sample intake
Required flags passed on Copilot CLI 1.0.89-3; the two jobs prepared and the dashboard stopped for its scope answer.
doctor itself checks neither authentication nor model availability. The real-model exercise is a separate evidence scope.
Unsupported / unavailable source
Vendor-without-source, manual-review/different-stack and missing-source entries stayed blocked. Initial run and resume made zero model calls.
The completion check rejected the incomplete portfolio instead of reporting successful migrations.
Review gate
A stale plan hash was rejected; the source-backed policy plan required its exact current hash.
Named synthetic-test operator review, not authenticated customer or production approval.
Artifact fingerprint, reproducibility and outstanding adoption checks
The tested archive is slack-teams-portfolio-v0.2.0.zip, SHA-256 c9417110cd8a88f8e8e8747501683cb655d2ce4eb388deaaf1190a4f6c8f7f9d. It has 66 files including the release manifest. This identifies a private test artifact; it is not a download link or a source release.
The extra Playwright browser review is a separate harness used for this exercise, not a check automatically installed or run by the packaged CLI. Engineers must supply equivalent UI/integration review. A domain-level pass is not enough to accept the dashboard.
Resolve or explicitly reject failed targets before handoff. Before claiming independent-adopter readiness, use a separate user and clean machine with a new authorised source application and that user's own tenant/integrations. Linux/macOS, customer source, real production identity, live deployment, load and full operational acceptance are not established by this exercise.
Current release test / final managed costs / 25 September 2026
Cost per asset. Cost of operating the kit.
The new 200-credit allowance covered two synthetic assets and bounded repairs. Native usage was reconciled across nine runner invocations and two resumed worker sessions. Failed attempts are included; cumulative session totals are not counted again on every resume.
Final managed AI credits — not an all-in project price
Asset
Outcome
Assess
Implement
Repair
Total
Policy lookup bot
Failed; four attempts exhausted
4.090995
16.338975
9.690330
30.120300
Approvals dashboard
Accepted locally; initial generation + two repairs
6.569730
26.832720
22.534440
55.936890
Final managed total, including the failed asset
86.057190
113.942810 credits remained from the unchanged 200-credit allowance. No paid clarify or discuss invocation occurred in this particular run; recording the scope answer was deterministic. Investigation through the two model assessments is included above. The outside conversation and review are a different, unallocated scope.
What is metered, model-free, or still unallocated?
Work
Cost treatment
Important boundary
Runner-managed investigation and migration
Metered per asset and stage.
Assessment, model clarification, consultation, implementation and repairs retain native usage evidence. This run totals 86.057190 credits, including unsuccessful work.
Install, initialise, record answers, approve, compile/replay, check/report and guarded resume
0 additional migration-model credits for these deterministic operations.
They do not themselves invoke a model. Machine/CI time, network, licences and operator effort are not thereby free. Having an assistant operate or interpret them can add separate AI usage.
Outside coordination, browser-review/harness work and documentation
Unallocated — not zero.
These activities were outside the managed runner. There is no complete task-aligned native checkpoint pair for this conversation, so no defensible per-asset or full-task AI total is invented.
Staff, integrations, deployment and ongoing hosting
Separate organisational/infrastructure costs; not priced in AI credits here.
This exercise deployed no new tenant app and provisioned no production host. It is not a quote for rollout or operations.
86.057190 is the managed migration-run cost, not the total cost of this exercise. For repeatable budgeting, use the runner's discuss command for metered app or shared investigation, track external work separately, and estimate from a representative pilot including failures and repairs. Do not multiply only the successful dashboard price by the number of Slack apps.
The portfolio preview replaces manual coordination with durable app jobs and explicit gates. It does not remove business ownership or pretend every installed Slack app is convertible.
Inventory & scope
Supply source allowlists, owners, dependencies and approved acceptance cases. Missing source and unsupported patterns stay visible as blockers.
Investigate & clarify
Assess actual source, save owner answers and meter app-specific or shared consultation. Reuse approved organisation-wide decisions.
Review the exact plan
Bind local approval to the assessment hash. Unresolved questions and unsupported strategies prevent implementation.
Generate & repair
Use scoped GPT-5.4 mini sessions and reviewed recipes. Keep source rules intact. Feed rejected results into bounded repairs.
Verify independently
Compile and compare expected behaviour, state and audit. A successful model exit is not acceptance; local verification is not deployment.
Handoff with costs
Deliver generated code, gaps and evidence with incremental app/stage costs. Production rollout requires separate engineering and approval.
The preview is sequential and resumable. App workspaces and file-only tools provide scoped work, not a hostile-code sandbox. Only reviewed, trusted source should be replayed.
Who does what at each gate?
1. The engineer defines the portfolio; the controller prepares the evidence
You create an inventory pointing to source jobs and record shared decisions once. init validates the inventory, dependencies and source paths, then copies only the selected files into separate app workspaces. Missing source or an unsupported disposition is visible as a blocker.
On run, the controller prepares the app revision and checks the source baseline before generation. This is a deterministic preparation/checking step, not the model guessing what the original application does.
2. Copilot investigates the supplied source and proposes a Teams plan
The scoped worker reads the source, declared capabilities, acceptance cases and recipe contract. It writes assessment.json: source-line evidence, reusable logic, target surfaces, additional findings, unknowns, blockers and deployment prerequisites.
This investigation is source-based. It does not independently browse a live Slack workspace. If live UI behaviour or an external system needs review, the operator must supply that evidence and make it part of the acceptance process.
3. Owners resolve uncertainty; the conversation is recorded rather than lost
answer records a question's answer, named operator and timestamp. If an existing assessment needs revision, a metered clarify pass incorporates the decisions. Additional app-specific or shared investigation can be run through discuss and is charged to that scope.
Advice does not automatically become an approved requirement. Unresolved questions or blockers prevent plan approval. Conversation outside the runner is an external cost, not silently included in its totals.
4. An operator approves the exact plan, not a vague instruction to “migrate”
The operator reviews the actual assessment, source evidence and baseline, then supplies its hash to approve. Approval permits local implementation of that unchanged plan. Source or approved-plan changes require a new reviewed revision.
These are local named-operator records, not authenticated business-owner signatures or enterprise CI approvals. Production change control must supply that stronger authority separately.
5. Copilot implements the target; the controller rejects incorrect results
The worker adapts the interface and transport while retaining the source domain service. The controller independently checks protected inputs, approved package/configuration, compilation and recipe-specific outcomes. Failed checks become explicit repair feedback within the remaining allowance.
There is no silent model escalation or unlimited retry loop. An exhausted implementation allowance stops the app; an operator can approve a recorded, bounded extension without changing the aggregate budget or source contract.
6. Downstream acceptance can still reject a green local check
The bot replay compares responses, visibility, buttons and state across three synthetic Teams transport variants. The Home checks compare domain responses, state/audit and spoofed client identity, plus syntax/static integration checks. Neither is a real tenant deployment.
Browser, integration, accessibility and owner review remain separate acceptance layers. Use request-repair to record a defect found after a local pass. Use accept only after review, and check to confirm all jobs have intact local verification and complete managed metering. No command here grants production deployment approval.
Worked example: what changes in the delivery bot?
The source owns the rules: look up a shipment, escalate it, allow only the appropriate role to resolve it, reject invalid transitions and avoid duplicate audit entries. The Teams implementation calls that same service rather than asking a model to make those decisions at runtime.
The migration replaces Slack command/action handling with a native Teams command, Adaptive Card actions and private replies. It also has to satisfy the Teams invoke acknowledgement contract. In the fresh batch, a model draft omitted the separate private reply after fixing the acknowledgement; the replay rejected it, and an explicitly approved repair restored both operations.
That is the repeatable part: preserve a reviewed source contract, generate a platform adapter, check exact behaviour and retain the failure/cost evidence. It is not an assurance that any app converts correctly on the first attempt.
Private run artifacts, not automatically published
What comes out of a migration?
Output
What it establishes
What it does not establish
assessment.json
A source-backed mapping, questions, strategy and prerequisites.
Complete requirements discovery or authenticated owner sign-off.
teams\
Generated SDK handlers and manifest draft, or dashboard HTML/adapter, with the preserved domain service.
A fully provisioned, ready-to-sideload or production-hosted application.
implementation.md
The mapping, deliberate UX changes and remaining implementation/deployment gaps.
Proof that the described behaviour was independently observed.
verification.json
The actual local checks and their result for that output revision.
Live Teams authentication, installation, client rendering or production readiness.
report.json / report.md
Portfolio statuses, blockers and managed app/stage costs.
A complete project invoice or a guarantee that every app succeeded.
State, snapshots and native usage evidence
Resumption, source/plan/output integrity checks and incremental usage reconciliation.
An OS security boundary or permission to publish customer source and conversations.
Where the files are kept
Private artifacts stay under the ignored portfolio run directory. The public release deliberately does not copy these directories into the shareable kit.
Move reviewed generated code into its destination repository through normal change control. Supplying hosting, production identity/authorisation, durable storage, registrations, consent, secrets, client acceptance and rollout/rollback remains separate engineering work.
Fresh portfolio acceptance / local, not a new tenant deployment
Three new targets. A complete managed ledger.
The controller generated fresh versions from separate source workspaces, recorded clarification and investigation, and brought all three through independent local verification and operator acceptance. Resuming the accepted batch made no further model calls.
Fresh GPT-5.4 mini portfolio run, in AI credits
Application
Assess
Clarify
Discuss
Implement
Repair
Total
Policy
4.65
2.05
3.46
26.97
14.06
51.188835
Delivery
6.93
3.15
0
47.59
32.61
90.285630
Dashboard
10.29
0
0
14.85
31.74
56.884485
Managed total, including failed attempts and corrections
198.358950
Stage columns are rounded. The approved allowance was 1,000 credits. Kit development, outside coordination/review, the browser harness, public documentation, staff time and hosting are separate, excluded scopes. These are not full project prices.
The gates mattered. Delivery exhausted its default attempt limit and required explicit user-approved extensions; it passed on attempt seven. Browser review rejected a dashboard that had already passed domain checks. Its malformed-response handling and retry path were corrected before acceptance. No generated target was manually repaired by the coordinator.
New bot outputs passed source/target transport replay. The new dashboard passed domain checks plus a five-scenario local browser harness with synthetic Teams context and intercepted HTTP. Earlier real-client evidence does not imply these new revisions were deployed.
Measured usage, explicit boundaries
Nine accepted GPT-5.6 migrations, including the operating cost.
Three fresh samples each of Equipment Loans, Store Operations and Manager Approvals were generated from unchanged synthetic Slack sources. Every final sample passed its independent browser suite and native Teams parity review. Failed attempts, repairs, coordinator usage and the supervising conversation are included through the frozen accounting cutoff.
GPT-5.6 Sol accepted migration samples, in AI credits
Application type
Accepted n
Direct worker mean
Median
Observed range
Worker total
Allocated all-in mean*
Equipment Loans
3
295.095800
318.381940
242.487520–324.417940
885.287400
665.143926
Store Operations
3
314.773827
287.960180
265.559020–390.802280
944.321480
684.821952
Manager Approvals
3
238.386000
224.466840
206.930620–283.760540
715.158000
851.331539
Nine accepted worker migrations
2,544.766880
—
*The all-in mean is a transparent planning allocation, not a native per-app coordinator meter. Coordinator cost is divided only within the batch it coordinated; shared parent setup, supervision, testing and reporting is divided equally across all nine accepted migrations.
All measured AI usage through 25 September 2026 21:52:37.417Z
Cost scope
What it includes
Credits
Migration workers
Assessment, implementation and every metered repair for all nine accepted outputs.
2,544.766880
GPT-5.6 coordinators
Three rich-app coordinators plus the three-sample Manager Approvals coordinator; browser/native orchestration and recovery included.
2,117.914120
Parent setup, supervision, testing and reporting
Exact parent-session native meter from the original approval boundary: 1,370.881050 GPT-6 Astra credits incurred before the switch plus 570.330200 GPT-5.6 Sol credits.
1,941.211250
All-in measured benchmark total
6,603.892250
Of which GPT-5.6 Sol
5,233.011200
No reset hid the expensive setup. The supervising conversation had already consumed 1,370.881050 GPT-6 Astra credits before it was switched to GPT-5.6 Sol. Those credits remain in the all-in total. The 50,000-credit ceiling was not approached.
Acceptance scope: every Equipment Loans and Store Operations sample passed 14 browser scenarios and a real Teams personal-tab lifecycle with exact Slack business-state/audit parity. Every Manager Approvals sample passed nine browser scenarios and native approve/reject/refusal/audit parity, including one-use ticket rejection. Failed and superseded attempts remain charged. Human time, licences, subscriptions and infrastructure are not AI-credit units. Static publication after the frozen cutoff launches no migration workers and is outside this fixed benchmark record.
Six additional patterns: 18 GPT-5.6 samples
Three fresh samples were run for every remaining documented pattern. Maintenance Approvals, Policy Lookup, Delivery Exceptions, API Reservations and Service-desk Intake passed local and native Teams acceptance. Operations Notifications passed local acceptance only; it was never hosted and is not claimed as a completed migration.
Additional GPT-5.6 Sol pattern samples, in AI credits
Pattern
Acceptance
Accepted n
Direct worker mean
Observed range
Worker total
Allocated all-in mean*
Maintenance Approvals
Local + native Teams
3
150.449260
140.663620–164.925880
451.347780
248.318201
Policy Lookup
Local + native Teams
3
86.834200
65.717740–119.882120
260.502600
184.703141
Delivery Exceptions
Local + native Teams
3
122.878953
94.446480–153.144740
368.636860
220.747894
API Reservations
Local + native Teams
3
130.244387
107.764000–154.473020
390.733160
228.113328
Service-desk Intake
Local + native Teams
3
140.076560
124.783720–161.300520
420.229680
237.945501
Operations Notifications
Local only; not hosted
3
72.870407
69.746880–75.673860
218.611220
170.739348
All measured AI usage for the 18-sample additional-pattern batch
Cost scope
Credits
Migration workers
2,110.061300
GPT-5.6 coordinator
1,626.566240
Parent supervision and reporting
135.074700
All-in measured total
3,871.702240
All-in mean across 18 samples
215.094569
*Coordinator and parent usage was measured for the batch rather than per migration. The allocated all-in means add an equal 97.868941-credit share of that overhead to each direct worker mean. Failed startup and rejected attempts remain in the ledgers. See the detailed accounting and acceptance boundary.
Non-UI event-driven extension: six fresh migrations
Two additional non-dashboard archetypes test more demanding integration behaviour. Procurement Status Assistant combines private commands, synthetic upstream purchase-order webhooks and Adaptive Card actions. On-call Incident Router ingests monitoring events, deduplicates and routes incidents, then supports acknowledgement, escalation and resolution actions. Each archetype was built once as a synthetic Slack source and migrated independently three times.
GPT-5.6 Sol non-UI event-driven costs, in AI credits
Archetype
Accepted n
Direct migration mean
Median
Observed range
One-time source + maintenance
Amortized all-in mean*
Procurement Status Assistant
3
353.653060
371.317840
317.484040–372.157300
133.123360
578.714633
On-call Incident Router
3
271.343553
252.635200
194.672180–366.723280
167.260820
507.784280
All measured AI usage for the six-migration event-driven programme
Cost scope
Credits
Migration samples
1,874.989840
One-time source creation + maintenance
300.384180
Shared kit engineering
27.392840
GPT-5.6 coordinator
732.373860
Parent supervision/reporting
324.356020
All-in measured programme total
3,259.496740
All-in mean across six migrations
543.249457
*Each archetype's source/maintenance cost is divided across its three migrations. Shared kit, coordinator and parent usage totals 1,084.122720 credits and is divided equally across all six migrations: 180.687120 each. Procurement: `353.653060 migration + 44.374453 source + 180.687120 shared = 578.714633`. On-call: `271.343553 + 55.753607 + 180.687120 = 507.784280`. A timed-out Procurement implementation remains charged at 146.504260 credits. See the detailed evidence.
Maintenance, policy, delivery, reservations, intake, procurement status and on-call routing
7
21
3,766.439920
179.354282
Complexity changes the average. The five earlier command/workflow patterns had direct means of roughly 87–150 credits. The two new event-driven patterns averaged 271–354 because they add webhook validation, event deduplication, protected HTTP transport, card-action authorization and deeper recovery tests. The 179.354282-credit broader average is a mixed planning figure, not a promise that every non-UI migration costs the same.
Two new full applications: accepted code, blocked installation
Store Opening Readiness and Product Recall Coordination were designed as new substantial Slack applications, source-built, analysed for maintenance, migrated through the kit and independently tested. Both final Teams targets passed 15 browser scenarios and protected-host lifecycle parity, including one-use-ticket rejection. Migration Examples Lab 1.4.0 was built, but actual tenant installation could not be completed: the approved Teams renderer was unresponsive and the approved CLI identity lacked Microsoft Graph AppCatalog scope.
GPT-5.6 Sol full-application programme, in AI credits
Application or scope
Outcome
Direct worker credits
Allocated all-in cost*
Store Opening Readiness
Target accepted; 15 browser scenarios and protected-host Teams parity passed. Live Slack retained task lifecycle evidence, but create/sign-off and installed personal-tab execution remain unproven.
1,433.576520
3,141.093640
Product Recall Coordination
Target accepted; full live Slack lifecycle, 15 browser scenarios and protected-host Teams parity passed. Installed personal-tab execution remains unproven.
671.253800
2,378.770920
Reusable kit work
Model support, endpoint/TeamsJS verification and reviewed retry extensions; original kit unchanged.
227.203440
—
Coordinator
Source, migration, repair, browser/native orchestration and reporting, including all blocked phases.
2,637.787700
—
Parent supervision/reporting
Native meter from the fixed programme boundary.
550.043100
—
All-in measured programme total
5,519.864560
Not counted as completed migrations. The code-generation and protected-host gates passed, but the package was not installed into the tenant and the apps were not exercised as actual installed Teams personal tabs. The Store live Slack capture also did not complete create and sign-off. These gaps are shown rather than converted into success.
*For planning only, reusable kit, coordinator and parent costs are split equally between the two applications; direct app worker costs remain app-specific. Every failed and superseded attempt is charged. Human engineering, tenant administration, licences, hosting, durable storage, security, monitoring and support remain separate non-AI categories. See the full result and production boundary.
Two more full-application archetypes: source recreation and migration separated
Supplier Onboarding Hub and Major Incident Command were added to test substantially different data, roles and lifecycle complexity. Both passed deterministic source and Slack-handler integration tests, exact source/target integrity, real Chromium acceptance and protected-host lifecycle parity. Supplier passed 18 browser scenarios; Major Incident passed 17. Packages were prepared but not tenant-installed, and live Slack client operation was unavailable, so these remain controlled engineering benchmarks rather than completed tenant migrations.
GPT-5.6 Sol full-application extension, in AI credits
Application
Source recreation*
Maintenance analysis
Repeatable migration + acceptance repair
Direct-worker subtotal (sum of previous 3)
Shared AI overhead allocation
Allocated all-in total
Supplier Onboarding Hub
143.623440
40.151840
581.604480
765.379760
366.533610
1,131.913370
Major Incident Command
320.736440
47.008600
526.707360
894.452400
366.533610
1,260.986010
All measured AI usage through 27 September 2026 15:13:32.535Z
Cost scope
What it includes
Credits
Direct application workers
Source analysis/build/repair, maintenance analysis, Teams assessment/implementation/repair and model-led acceptance repair.
1,659.832160
Reusable kit engineering
Shared verifier and harness work used by both applications.
75.032320
GPT-5.6 coordinator
Deterministic orchestration, testing, evidence and reporting.
500.632620
Parent supervision/reporting
Native parent-session meter from the extension boundary.
157.402280
All-in measured extension total
2,392.899380
All-in mean per full application
1,196.449690
*Source recreation is analysis plus source implementation and repairs. It is a one-time cost only when the Slack application must first be reconstructed or built for the benchmark; it should not be added to a source-available migration estimate. The direct-worker subtotal is source recreation + maintenance analysis + repeatable migration. Shared AI overhead is each app's equal share of 75.032320 kit + 500.632620 coordinator + 157.402280 parent credits. Failed and superseded attempts remain charged. Tenant upload/install, installed personal-tab execution and live Slack-client operation were not performed. See the detailed result.
Consistency pair: quality CAPA and workforce certification
The same benchmark was repeated with Quality Nonconformance & CAPA and Workforce Certification Tracker. Both passed 19 real Chromium scenarios, strict authentication and Origin checks, complete protected-host lifecycles, exact state/audit parity and one-use-ticket rejection. Packages remain prepared-not-installed and live Slack-client operation was not available.
Second GPT-5.6 Sol full-application pair, in AI credits
Application
Source recreation
Maintenance
Migration + acceptance
Direct-worker subtotal
Shared AI overhead allocation
Allocated all-in total
Quality Nonconformance & CAPA
229.232760
39.293680
648.411320
916.937760
239.986080
1,156.923840
Workforce Certification Tracker
188.429020
39.856560
559.210480
787.496060
239.986080
1,027.482140
All measured AI usage for the second full-application pair
Cost scope
Credits
Direct application workers
1,704.433820
Reusable kit engineering
68.699320
GPT-5.6 coordinator
217.682580
Parent supervision/reporting
193.590260
All-in measured pair total
2,184.405980
Consistency across all four comparable full applications
Measure
Allocated all-in credits
Mean
1,144.326340
Median
1,144.418605
Observed range
1,027.482140–1,260.986010
Range width
233.503870
Standard deviation
83.028345
Coefficient of variation
7.26%
The four-app planning allocation is reasonably consistent. All four landed within about ±10% of the 1,144-credit mean despite materially different workflows. This is evidence for a controlled synthetic scope, not a universal fixed price. No GBP value is published because AI credits do not define a universal pound conversion; apply the actual billing-plan rate separately.
The second pair's shared overhead is `(68.699320 kit + 217.682580 coordinator + 193.590260 parent) / 2 = 239.986080` per app. Quality arithmetic: `229.232760 + 39.293680 + 648.411320 = 916.937760`, then `+ 239.986080 = 1,156.923840`. Workforce arithmetic: `188.429020 + 39.856560 + 559.210480 = 787.496060`, then `+ 239.986080 = 1,027.482140`. See the detailed consistency result.
What the wider evidence suggests
Small command and workflow patterns averaged roughly 87–150 direct worker credits in the 18-sample batch. Existing rich-app migrations averaged roughly 238–315 direct worker credits. New full applications with source recreation, maintenance analysis and deep acceptance used 765–917 direct worker credits, or 1,027–1,261 after shared AI overhead allocation.
Do not mix the scopes
A source-available conversion is cheaper than recreating an undocumented Slack application first. Protected-host acceptance is stronger than local generation but is still not tenant installation. Human discovery, app registration, consent, hosting, security, integrations, rollout and support remain separate non-AI costs.
Earlier worker-only evidence
The figures below are retained as historical worker-session evidence. Their narrower scopes exclude coordination and should not be compared directly with the all-in benchmark above.
Historical GPT-5.4 mini worker sessions, in AI credits
Application
Assessment*
Implementation
Repairs
Total
Policy lookup
5.34
20.93
22.18
48.44712
Delivery exceptions
5.28
15.91
7.41
28.59333
Manager dashboard
9.19
16.70
25.39
51.28941
Total managed worker usage for these three sessions
128.32986
*Assessment includes assessment corrections. Stage values are rounded. The earlier corrected maintenance run used GPT-5.6 Sol and consumed 327.52824 credits, excluding earlier separate prototype attempts. Different workloads and scopes make this unsuitable as a controlled model comparison.
Use the right number
The direct worker mean is useful for generation capacity. The allocated all-in mean is more useful for programme planning because it includes measured coordination and supervision.
Neither includes human effort, licences, durable hosting, customer integrations or production rollout.
What the new runner records
Every model invocation it launches: source assessment, clarification, consultation, implementation and repairs. Resumed sessions contribute only incremental usage; failed attempts stay in the totals.
Missing metering stops new model work. Product development and external conversations remain explicitly unallocated, not silently zero.
Which actions consume model credits?
Source assessment, model clarification, managed consultation, implementation and model repair are metered. Recording an answer, checking status, approving a plan, generating a deterministic report and resuming an already accepted batch do not themselves invoke a model. The controller's own compilation/replay checks are also model-free; external services in an application's code have separate costs and approval boundaries.
Each invocation keeps native usage evidence. A resumed session contributes only its increase in cumulative usage, and unsuccessful attempts remain in the total. Missing accounting blocks new model work. The CLI credit limit is soft: in-flight work can overshoot, and the ledger records that rather than truncating the bill.
A full programme estimate must separately allow for shared tooling, source preparation, outside coordination/review, customer integrations, human effort, infrastructure and rollout. Not every app will fit an existing recipe.
npm ci --ignore-scripts
npm test
npm --prefix .\portfolio test
npm --prefix .\portfolio run migrate -- doctor
These checks make no migration-model calls. doctor returning ready: true is a CLI compatibility result, not proof of sign-in, model entitlement or production readiness.
2. Review the inventory, then start a paid run
Do not run the bundled example unchanged without reviewing its allowance. Its budgetCredits: 1000, invocationCredits: 75 and four default attempts per stage permit new paid work. Choose an approved budget, app list, source root and scope first. The release-test allowance is a separate record, not a default for another user.
npm --prefix .\portfolio run migrate -- init examples\pilot.json
npm --prefix .\portfolio run migrate -- run ..\.portfolio-runs\three-app-pilot
npm --prefix .\portfolio run migrate -- status ..\.portfolio-runs\three-app-pilot
Answer the reported questions, inspect each source-backed assessment, and approve its exact hash before implementation. The kit's operator guide explains approval, metered discussion, retry, recovery and acceptance.
The example launches fresh model work, not a free playback of historical evidence. Native credit caps are soft; in-flight work can overshoot. No automatic tenant deployment or GitHub publication occurs.
Commands for the review and acceptance cycle
These are command shapes, not values to paste unchanged. Substitute the actual state directory, app, question IDs and assessment hashes returned by your run. Paths after npm --prefix resolve from the portfolio directory.
npm --prefix .\portfolio run migrate -- discuss STATE_DIR APP QUESTION_FILE
npm --prefix .\portfolio run migrate -- answer STATE_DIR APP QUESTION_ID "Decision" "Reviewer"
npm --prefix .\portfolio run migrate -- approve STATE_DIR APP PLAN_SHA256 "Reviewer"
npm --prefix .\portfolio run migrate -- run STATE_DIR
npm --prefix .\portfolio run migrate -- request-repair STATE_DIR APP "Review finding" "Reviewer"
npm --prefix .\portfolio run migrate -- accept STATE_DIR APP "Reviewer"
npm --prefix .\portfolio run migrate -- check STATE_DIR
npm --prefix .\portfolio run migrate -- report STATE_DIR
run can finish at a question/approval barrier or report blocked jobs. Its successful process exit is not proof that the portfolio is complete. check exits nonzero unless every job has intact local verification and complete managed metering.
Practical questions
Before you point it at a real portfolio.
Can I give it a Slack workspace URL and say “migrate everything”?
No. v0.2 takes an explicit inventory of source jobs. It does not enumerate installed apps, retrieve vendor source or automatically review the live Slack UI. Start by identifying app ownership, source availability, integrations and business criticality; then select jobs that fit a reviewed recipe.
Can I download the toolkit or finished Teams apps here?
No. This publication is the website and documentation only. Toolkit source, fixtures, generated targets and the ZIP remain private. The case studies explain what was built, how it was reviewed and what it cost, so other engineers can reproduce the approach with their own authorised source and tooling.
If someone receives the private ZIP, will it just work?
It is reusable engineer-operated tooling, not a turnkey installer. A compatible Windows environment can install the package and prepare supported jobs, but the operator must supply model access, source contracts, acceptance cases and decisions. Live use additionally needs registrations, permissions, identity, hosting and integration setup. The release tests state exactly what passed and what was not tested; they do not certify another user, machine or tenant.
Is this a Copilot Studio agent, a single skill file or a hosted service?
No. It is a local Node-based developer kit using GitHub Copilot CLI workers. It includes a custom agent for the older per-app flow, but the portfolio controller supplies the state, gates and accounting. Installing only that agent file does not install the batch workflow.
Does it copy Slack Block Kit directly into Teams?
No. The recipe chooses a Teams surface appropriate to the reviewed source behaviour: native commands, Adaptive Cards or the supported personal-dashboard design. Business decisions stay in the original service. UI redesign is intentional and needs acceptance; pixel-for-pixel conversion is not promised.
Can I use the source examples without provisioning Slack or Teams?
The local regression/replay examples do not need live Slack or Teams registrations. Generating new code does require a compatible Copilot CLI account and allowance. A real-client demonstration needs separately approved tenants, apps, authentication, hosting and client checks; those resources are not bundled.
What happens when an app does not fit or the model gets it wrong?
The app remains blocked, awaits information, or fails verification; it is not counted as a successful migration. Repairs use the same approved scope within the remaining limits. A named operator can record a bounded retry extension, but changing the source contract, recipe or plan requires a new reviewed revision. A local pass can still be rejected by downstream review.
Do the generated examples need an AI model at runtime?
The demonstrated policy and approval decisions are deterministic calls to the reused business service, not model-generated decisions. Copilot is used to perform the migration. A different application's own AI or external-service dependencies would require separate assessment and accounting.
Does a green report mean the application is safe to deploy?
No. Read exactly which checks passed and which behaviours the baseline covers. The kit's approvals are local operator labels, not authenticated business-owner or security approvals. Production identity, durable state, permissions, integrations, accessibility, load, intended Teams clients/channels and operational handover require their own acceptance.
An honest preview
What this does not prove.
Not a customer production migration. All demonstrated records, policies and workflows are synthetic.
Not every Slack app. The recipes cover defined Node/Bolt and approval-domain contracts. Other stacks and vendor apps need another reviewed path.
Not production acceptance. Durable state, SSO, customer integrations, multi-person isolation, load and comprehensive accessibility/client testing remain separate work.
Not transferable live proof. Earlier live examples do not establish that a newly generated portfolio revision is installed in Teams.
Not a Microsoft product. A community project built with GitHub Copilot, shared under the MIT licence as is, without warranty, an SLA or Microsoft support.
Not a public data dump. Tenant identifiers, credentials, private conversations, raw event logs and unsanitised screenshots are deliberately excluded from this page.
Evidence summary dated September 2026. The gallery embeds reviewed, cropped derivatives from hash-checked historical captures, with account-reference redaction where stated. Original captures and full private evidence remain outside this documentation repository. The separate earlier expanded walkthrough contains nine original screenshots from a set of 22 hash-checked captures.