Skip to content

Repository files navigation

Transcript-to-OKF MVP scaffold

This repository hosts the infrastructure and .NET 8 Azure Function scaffold described in Vision.md: a SharePoint transcript is copied to Blob Storage, an HTTP-triggered Function runs one bounded agent loop, and visible OKF markdown plus coverage and audit artifacts are written back.

The current scaffold parses VTT files and exercises the local repository, coverage verifier, and audit writer. Model calls and Microsoft Graph writes are explicit TODOs; the scaffold does not pretend transcript knowledge was incorporated.

Repository layout

infra/                              Resource-group-scoped Bicep and dev parameters
src/TranscriptOkf.AgentLoop/        Azure Function, local CLI, models, and service seams
prompts/                            Structured prompt contracts
samples/                            Vision-aligned transcript, OKF, and request examples
scripts/                            Azure CLI validation and deployment scripts
docs/                               Deployment/manual integration guide and grouped TODOs
.github/workflows/infra.yml         Bicep build, optional Azure validation and deployment

Prerequisites

  • .NET 8 SDK
  • Azure CLI 2.47.0 or newer with Bicep support
  • Azure Functions Core Tools 4 for local HTTP hosting
  • PowerShell 7 or Bash
  • An Azure subscription where you can create resources and role assignments

Run locally with mocked services

From the repository root:

dotnet restore .\TranscriptOkf.sln
dotnet build .\TranscriptOkf.sln -c Release
dotnet run --project .\src\TranscriptOkf.AgentLoop -- --process `
  .\samples\Contoso\Transcripts\meeting-2026-06-20.vtt `
  .\samples\Contoso\OKF

The command creates or refreshes:

  • samples/Contoso/OKF/coverage.json
  • samples/Contoso/OKF/audit-report.md

It preserves the curated overview.md. Because model intelligence is intentionally not implemented, parsed segments remain visibly pending human/model review.

To run the HTTP Function:

Copy-Item .\src\TranscriptOkf.AgentLoop\local.settings.example.json .\src\TranscriptOkf.AgentLoop\local.settings.json
.\scripts\run-local.ps1

The helper publishes to the user temp directory first and runs that output with --no-build. This avoids a Core Tools/MSBuild argument issue when the repository path contains a comma.

Use POST http://localhost:7071/api/process-transcript with this local mock body:

{
  "blobUrl": "C:\\absolute\\path\\to\\DocGen\\samples\\Contoso\\Transcripts\\meeting-2026-06-20.vtt",
  "projectId": "contoso",
  "okfFolderPath": "C:\\absolute\\path\\to\\DocGen\\samples\\Contoso\\OKF",
  "transcriptFileName": "meeting-2026-06-20.vtt",
  "maxIterations": 3
}

Validate and deploy infrastructure

Authenticate and select a subscription:

az login
az account set --subscription "<subscription-id-or-name>"

Build and validate Bicep:

.\scripts\validate.ps1

Deploy the dev environment, publish the Function package, and verify the live health endpoint:

.\scripts\deploy.ps1

Override defaults when needed:

.\scripts\deploy.ps1 -ResourceGroup "rg-pa911-okf-dev" -Location "eastus2" -ParameterFile ".\infra\dev.bicepparam"

The deployment script:

  • verifies authentication and registers required Azure resource providers;
  • compiles and validates Bicep;
  • creates the resource group if needed;
  • deploys the infrastructure;
  • publishes and validates the .NET Function package;
  • deploys the package and restarts the Function;
  • retries the anonymous /api/health endpoint until Azure reports a working app.

Use -SkipCodeDeployment only when intentionally updating infrastructure without publishing code. Use -SkipSmokeTest only for troubleshooting.

Manual package publishing

The all-in-one deployment script is preferred. For troubleshooting, the equivalent manual package steps are:

dotnet publish .\src\TranscriptOkf.AgentLoop\TranscriptOkf.AgentLoop.csproj -c Release -o .\artifacts\function
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.FileSystem
$publishDir = (Resolve-Path .\artifacts\function).Path
$zipPath = Join-Path $PWD "artifacts\function.zip"
if (Test-Path $zipPath) { Remove-Item $zipPath -Force }
$archive = [System.IO.Compression.ZipFile]::Open($zipPath, [System.IO.Compression.ZipArchiveMode]::Create)
try {
  Get-ChildItem $publishDir -Recurse -File -Force | ForEach-Object {
    $entry = $_.FullName.Substring($publishDir.Length + 1).Replace("\", "/")
    [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($archive, $_.FullName, $entry) | Out-Null
  }
}
finally {
  $archive.Dispose()
}
az functionapp deployment source config-zip `
  --resource-group "rg-pa911-okf-dev" `
  --name "<functionAppName output>" `
  --src ".\artifacts\function.zip"

Do not set WEBSITE_RUN_FROM_PACKAGE=1 on this Linux Consumption app. The deployment uses a prebuilt zip pushed to the Function app.

GitHub Actions

The workflow builds the solution, runs the mocked CLI smoke test, validates the deployment package, and compiles Bicep on every run. To enable Azure control-plane validation, configure:

  • Repository variable AZURE_VALIDATION_ENABLED=true
  • Secrets AZURE_CLIENT_ID, AZURE_TENANT_ID, and AZURE_SUBSCRIPTION_ID
  • An OIDC federated credential for the GitHub environment/repository

Manual workflow dispatch can deploy both infrastructure and Function code, then verify /api/health.

Manual cloud setup

Azure AI model selection, Microsoft Graph Sites.Selected consent/site grant, and the Power Automate flow cannot be safely inferred or universally deployed. Follow docs/deployment.md exactly, then work through docs/TODO.md to replace the mock seams.

The quantified deployment-readiness assessment is in docs/deployment-readiness.md.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages