Repository navigation
Releases: Azure/agent-app-ingestion
Release list
v3.1.4
Changed
- Reviewed dependency maintenance. Update Uvicorn, Tenacity, Cosmos DB and
Storage management SDKs, and adopt jest-dom 7 on the existing Node 22 test
toolchain. Preserve the patched security dependencies and generated lock. - Grouped Actions maintenance. Check GitHub Actions weekly against
develop, grouped with a seven-day cooldown, matching the component
maintenance policy without introducing duplicate updates againstmain. - Chunk key hashing. Use SHA-256 instead of SHA-1 for the truncated suffix
of long Blob and SharePoint document IDs. Short IDs and parent IDs remain
unchanged. Existing long-key documents are not migrated automatically.
Reindex affected parents to replace their stored chunks before relying on
the new IDs; retained citations to previous chunk IDs may need refreshing. - Shared repository protection standard. Require pull requests and passing
quality, behavior and frontend checks without mandatory second-person review.
Preserve protected-base integrity, immutable Actions references and narrowly
scoped privileged workflow authorization.
Fixed
- Dependabot configuration syntax. Separate the GitHub Actions update
entry from the preceding package labels so all three update streams remain
valid YAML and dependency maintenance continues to run. - Security dependency updates. Update aiohttp, PyJWT, Pillow and pypdf to
versions outside the reported vulnerable ranges. Refresh frontend tooling
and transitive dependencies, with a scoped patched selector-parser override
for Tailwind typography. - Immutable GitHub Actions references. Pin the remaining workflow actions
to verified full-length commit SHAs without changing their selected versions,
and require agents to preserve SHA pinning when editing or regenerating CI.
Validation
- Release PR Azure/agent-app-ingestion#370 passed all required repository checks and the protected quality gate. The main release tree matches that validated candidate.
- The complete Dependabot YAML parses successfully with all three update streams, weekly Actions grouping, develop targets and a seven-day cooldown.
- Shared contract files are unchanged from the previous stable release.
- Validation was offline; no Azure deployment or live Azure end-to-end test was performed.
Publication scope and recovery
- This release publishes the source tag and GitHub Release only, not a container image or Python package.
- Prefer a forward corrective patch if an adoption issue appears; preserve immutable published tags. Previous stable reference:
v3.1.3.
v3.1.3
Changed
- Synchronize SharePoint user and group permissions independently of content modification timestamps across every affected item document and document-library chunk.
- Replace revoked grants without downloading, chunking or embedding unchanged content; skip writes when ACL sets are equal.
- Read complete Graph permission pages and effective document-library sharing permissions, including inherited grants and inheritance transitions.
- Keep ACL refresh retryable when content processing is blocked, and require confirmation for every Search merge.
Validation
- Full ingestion suite: 1,015 passed and 10 subtests passed.
- Protected quality checks: all passed, 0 findings.
- Release CI: unit tests, frontend build, lint, typing, architecture, policy, exception evidence and aggregate quality gate passed.
v3.1.2
Changed
- Align service identity, API metadata and document-analysis user agents with Agent Landing Zone naming.
- Read the
agent-app-ingestionservice label after the legacy service label while retaining the existing shared-label and final all-labels selector behavior.
Fixed
- Deploy application resources to
AZURE_APP_RESOURCE_GROUPfrom theagent-lzlabel. - Preserve the legacy group fallback only for confirmed missing or empty application-group settings; configuration access failures stop deployment.
- Synchronize runtime VERSION metadata and current service documentation.
Validation
- Python behavior and PowerShell/Bash destination regression tests.
- Maintained frontend test, lint and build commands plus protected quality checks and aggregate evidence.
v2.4.13-hotfix.1
Changed
Maintenance hotfix based exactly on ingestion v2.4.13, without incorporating
v2.4.14 or later changes.
Fixed
- Blob index-state queries rejected with app-only tokens. Replace
_ELEVATED_HEADERS = {"x-ms-enable-elevated-read": "true"}with
_ELEVATED_HEADERS = {}injobs/blob_storage_indexer.py. Blob index-state
and purge queries no longer request the elevated-read mode that returned
App-only tokens are not supported. The Search API version and
authentication configuration remain unchanged. - Blob purge fails during client initialization. Add
self._app = get_config()toBlobStorageDeletedItemsCleaner.__init__,
before identity resolution, fixing
AttributeError: 'BlobStorageDeletedItemsCleaner' object has no attribute '_app'.
Scope
- This is a historical maintenance release, not a cumulative replacement for the
latest stable release. - Changes are limited to the Blob indexer/purger in this module. Other helpers,
runtime components, infrastructure and configuration labels are unchanged. - Validation preserved
permissionFilterOption=disabledand records
carrying user/group/RBAC metadata. It does not establish authorization
enforcement or support forpermissionFilterOption=enabled. The hotfix
does not change the index policy.
Validation
- 44 Python tests passed, locally and inside the built image. Seven
regression cases fail against the original runtime and pass with this patch. - Controlled Azure testing with system-assigned managed identity passed:
scans matched the independent inventory, including permission-bearing records;
one new file was indexed with a real embedding and four were skipped as
unchanged. A repeat skipped all five with no uploads or failures. - Purge removed exactly one control chunk, corresponding to the deleted
test blob. All four survivors, vectors and permission metadata were preserved. - The original index was unchanged and the previous application image and
configuration were restored. Test processes used an existing OpenAI endpoint
override and a prewarmed tokenizer cache, without changing cloud settings.
Validated runtime commit: 222b6b137a671683eed80739d32e64583acaef5a.
Only validation documentation changed afterward.
Apply and rollback
Build and deploy only the ingestion component from this tag through the existing
approved process. Do not edit a running container or deploy the umbrella
repository for this fix.
Validate against the target index policy before production. Preserve the previous
image, revision and command settings for rollback; image rollback does not
restore deleted index records.
v3.1.1
Removed
- Legacy
gpt-ragApp Configuration label fallback andGPT_RAG_key fallback (Azure/agent-landing-zone#695). The app now reads only its app label, thenagent-lz, then no label.
Validation
- Unit test suite passed locally.
v3.0.1
Fixed
- Fail early with a clear error when
NETWORK_ISOLATION=true,BUILD_MODE=acr-taskandACR_TASK_AGENT_POOL_NAMEis missing (Azure/agent-landing-zone#741).
v3.0.0
Added
- Agent Landing Zone R14 dual-read (Azure/agent-landing-zone#695). App Configuration
now also loads theagent-lzlabel, which takes precedence over the legacy
gpt-raglabel;gpt-ragremains a fallback for this transition release.
Keys prefixedAGENTLZ_are read first, falling back to the matching
GPT_RAG_key.
Changed
-
Audit events move to the
audit-event-v2contract (breaking for audit
queries). Ingestion audit records now usecustomEvents.namevalues under
agentlz.audit.ingestion.*(wasgptrag.audit.ingestion.*),
schema_version2, andservice_nameagent-app-ingestion. Field names and
semantics are unchanged. The vendored v2 schemas are pinned at
884dfa2441d3313c8ec46a099f60ce86e7abb6cdf88bb5b5da720463edbf5e97(logical)
and48416073768c0710b9a1f58640d4e822745f28b3a17b3712a2fe4cd9326c9c07
(Application Insights wire); the v1 files remain incontracts/as history.
Update dashboards and alerts that filter ongptrag.audit.. -
Reviewable Python quality bootstrap. Add development-only pinned Ruff,
mypy, Import Linter and Grimp, explicit module/typing inventories,
individual-debt and handler records, mutation fixtures, and protected-base
quality jobs in the existing pytest workflow. The aggregate rejects missing,
skipped or stale evidence. Inherited violations remain visible and blocking;
no blanket exemptions or claim of administrative activation is introduced.
Changed
-
Administratively approved initial quality adoption. Activate exactly 67
existing, individually justified ingestion exception records under
Paulo's explicit authorization.
Preserve all fingerprints, outcomes, evidence selectors and pins. This
supersedes the proposal status below, not same-run evidence requirements;
it is neither independent GitHub review nor required-check activation. -
Jobs-owned scheduler coordination without API-to-entrypoint cycles.
Move the shared scheduler reference, registry, cron map, running-job
dictionary/lock and tracking wrapper tojobs.runtime, retaining the same
main re-exports, manual reservation behavior and scheduler lifecycle. Lazy
worker exports keep state-only imports from initializing Azure configuration
before startup authentication. Remove two overwritten, unused SharePoint
wrappers while retaining the shared registry/lock and startup ordering.
Fixed
-
Explicit configuration fallback and feedback availability. Preserve
endpoint then configured connection-string loading, with safe diagnostics
when fallback is used. Environment-only recovery now requires the existing
allow_environment_variablesopt-in; otherwise startup failures propagate.
Legacy panel overview addsfeedback.availableand discards incomplete
counts so unavailable feedback is distinguishable from genuine zero records. -
Preserve primary failures and cancellation during finalization. Keep
retrieval's sanitized query failure across Search cleanup errors, prevent
Blob terminal-summary errors from replacing established run failures or
cancellation, and propagate NL2SQL child cancellation through run/audit
handling instead of reporting a finished run with a failed-document count.
Cleanup and summary writes remain attempts with safe diagnostics, not
guarantees. -
Operator frontend restores without invalid peer combinations. Align
React DOM/types with the existing React 19 dependency and wire Tailwind 4's
PostCSS plugin to the existing theme. Correct the React JSX and Vitest
configuration type imports without redesigning the dashboard. Run plain
npm ci, tests, lint and build on compatible Node 22 in the existing test
workflow; the aggregate rejects missing/skipped/failed frontend execution. -
Worker failures cannot fabricate ACLs or Search success. Require matching
upload/delete confirmations in Blob and SharePoint workers, propagate retry
exhaustion and datasource/permission failures, and preserve explicit failed
document outcomes rather than indexing with missing ACLs. Observe collection
task errors, cancel owned children, and close resources after partial
initialization or diagnostic failure. Preserve the existing credential,
configuration and per-record contracts with payload-safe diagnostics. -
Image and SharePoint purge outcomes require complete evidence. Scan all
image references before any deletion instead of using a 1,000-result cap or
failed/partial reference set. Use asynchronous Blob listing/deletion and
close owned resources on failure/cancellation. SharePoint counts only
matching positive SDK deletion results and propagates count, late-page and
unconfirmed-delete failures instead of publishing a finished purge summary. -
Every retained broad handler has an exact inactive disposition. Narrow
parser, SDK, Graph and optional-log recovery without concealing programming
defects. Individually propose the remaining existing public translations,
cleanup and audit protocol boundaries with executed failure evidence.
Preserve constructor source fallback, post-write refresh-only 200/applied,
hostile audit-value omission and audit wire bytes; no approval is activated. -
Operator and startup failures retain truthful, safe outcomes. Count only
confirmed log deletions, narrow optional history recovery to SDK failures,
and stop hiding scheduler/programming errors as missing queue data. Resolve
startup flags before scheduling and surface logging-configuration failures.
Preserve identity probes, panel HTTP errors, per-record skill results and
independent startup cleanup through exact inactive proposals with failure
evidence, while removing dependency payloads from diagnostics. -
Chunking preserves cancellation and confirmed partial results. Remove
return-from-finally suppression, narrow SDK/parser retries and optional
image failures, and close PDF/image resources and owned split files.
Preserve chunk IDs, content, metadata and explicit document errors while
preventing empty-URL upload success and sensitive caption/error diagnostics.
The existing terminal document-error boundary is individually proposed,
not approved. -
NL2SQL optional state cannot hide document failures. Narrow SDK/JSON
operations used for job logs and unchanged-document checks; unexpected
failures become explicit failed-document outcomes, not missing-state
defaults. Preserve confirmed upload counts, stable reindex keys and
independent resource cleanup, with safe diagnostics and individually
proposed, not activated, failure/cleanup boundaries. -
Model-service failures preserve outcomes without exposing payloads.
Keep OpenAI retry/usage semantics and original terminal exceptions while
narrowing retry parsing. Document analysis retains explicit error results
without authorization headers or response bodies in diagnostics; Blob-URL
analysis initializes its own PDF features, and figure failures use a
status-only HTTP error. Real JWT verification fixtures preserve existing
401/403 outcomes while narrowing token/claim parsing and retaining optional,
non-authoritative auth diagnostics as individually proposed boundaries. -
Malformed quality evidence cannot become a passing receipt. Validate
Ruff/mypy diagnostic types, positions, duplicate keys and exit consistency;
reject aggregate reports whose passed status contradicts their findings.
Real aggregate CLI fixtures cover missing/skipped jobs and stale or mismatched
artifacts without treating incomplete execution as successful validation. -
Direct uploads require authoritative Search confirmation. Exercise the
actual/ingest-documentsroute with the pinned SDK response model, reject
missing, duplicate and unrelated results, and retain the per-record response
and ACL fields. Audit exporter failure cannot reverse a confirmed upload. -
SDK and parser recovery is limited to expected failures. Keep explicit
error/None outcomes for failed SDK writes, secret reads and analysis calls
without logging downstream payloads. Only Cosmos not-found means absence;
unexpected adapter and SharePoint provider failures propagate. Blob download
retries only SDK failures and retains the original terminal exception.
Cursor, cron, timestamp and JWKS parsing retain their existing invalid-input
outcomes without broad handlers or redundant constructor wrappers. -
Static checks cannot import candidate tool shadows. Launch the protected
evaluator and tools with isolated Python, neutral working directories and
non-executable source package specs. Reject executable tool configuration,
isolate Git metadata reads, and inventory decorator-based typing suppressions
so candidate startup hooks, loaders and aliases cannot silently bypass checks. -
Quality-policy mutations cannot hide reviewed boundaries. Reject malformed
records and mismatched tool pins; retain conflicting lexical aliases, resolve
first-party and class-member exception bindings, invalidate changed catch
breadth, and require review for ownership-changing moves. Dynamic-import
allowances are exact-symbol, active, single-use records rather than reusable
call-expression exemptions. -
Primary failures no longer masquerade as confirmed work. Search deletion
uses the SDK delete operation and counts matching confirmed outcomes rather
than submissions; NL2SQL purge propagates failed scans and partial deletion.
Missing, malformed or duplicate Search responses cannot emit positive audit
outcomes. Cron/manual failures propagate through the existing audit context,
while startup jobs retain independent failure isolation. -
Configuration and diagnostic failures remain explicit and safe. Governance
reads no longer silently disable governance after selected-provider failure.
Boun...
v3.0.0-preview.2
Changed
- Deploy scripts read App Configuration settings from the
agent-lzlabel with fallback to the legacygpt-raglabel.
Pre-release for Agent Landing Zone v4.0.0-preview.2.
v3.0.0-preview.1
Changed
- Agent Landing Zone rebrand: dual-read of
AGENTLZ_*settings with temporarygpt-ragfallback. - Audit telemetry prefix
agentlz.audit.*(contract v2).
Pre-release for Agent Landing Zone v4.0.0-preview.1.
v2.7.4
Fixed
- Container image build no longer fails at
npm ciwithERESOLVE. Dependency bumps merged for v2.7.1 left the admin frontend with an inconsistent dependency set (react19 withreact-dom18,@types/react19 with@types/react-dom18, Tailwind 4 and Vite 8 without config migration), so v2.7.1–v2.7.3 could not be built.frontend/package.jsonandfrontend/package-lock.jsonare restored to the known-good v2.7.0 set. No frontend source changed, so the admin UI is unchanged. (#309) VERSIONnow matches the released version.