Files
freemo ca3399e177
ci.yml / fix(acms): invoke SkeletonCompressor in ContextAssembler.assemble() to propagate skeleton context to child plans (pull_request) Failing after 0s
CI / lint (pull_request) Failing after 31s
CI / quality (pull_request) Successful in 35s
CI / typecheck (pull_request) Successful in 51s
CI / security (pull_request) Successful in 58s
CI / coverage (pull_request) Has been skipped
CI / build (pull_request) Successful in 19s
CI / helm (pull_request) Successful in 24s
CI / unit_tests (pull_request) Failing after 6m58s
CI / docker (pull_request) Has been skipped
CI / e2e_tests (pull_request) Successful in 17m14s
CI / integration_tests (pull_request) Failing after 22m37s
CI / status-check (pull_request) Failing after 1s
CI / benchmark-publish (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Has been skipped
fix(acms): invoke SkeletonCompressor in ContextAssembler.assemble() to propagate skeleton context to child plans
Added skeleton_fragments: tuple[ContextFragment, ...] field to ContextPayload in context_fragment.py
- Enables carrying compressed skeleton fragments along with normal context.

Extended ACMSPipeline.assemble() in acms_service.py
- Introduced skeleton_ratio: float = 0.15 (default matching spec) and parent_fragments: tuple[ContextFragment, ...] | None = None parameters.
- These same parameters are also added to ContextAssemblyPipeline.assemble() in acms_pipeline.py for consistency.

Skeleton compression integration
- In Phase 3 of both assemble() methods, computed skeleton_budget = int(budget.available_tokens * skeleton_ratio) and invoked self._skeleton_compressor.compress(parent_fragments, skeleton_budget).
- Compressed skeleton fragments are included in the returned ContextPayload.skeleton_fragments, enabling propagation of skeleton context to child plans.

Tests and behavior coverage
- Added a TDD issue-capture Behave scenario (@tdd_issue @tdd_issue_3563) to demonstrate the fix.
- Added four Behave unit test scenarios asserting: compressor invocation, correct arguments, skeleton presence in output, and skeleton_ratio budget enforcement.
- Added a Robot Framework integration test: parent plan accumulates context → child plan spawned → child plan context contains non-empty skeleton.
- Added skeleton-context-inheritance command to helper_acms_pipeline.py to support testing and manual verification.

Key design decisions
- skeleton_ratio defaults to 0.15 to align with the spec's --skeleton-ratio default.
- parent_fragments is None by default to maintain backward compatibility (no skeleton compression when no parent context).
- skeleton_budget is computed as skeleton_budget = int(budget.available_tokens * skeleton_ratio), deriving the skeleton budget from the total token budget.
- Both ACMSPipeline and ContextAssemblyPipeline are fixed to maintain consistency across the codepath.

ISSUES CLOSED: #3563
2026-04-05 21:26:33 +00:00

75 lines
3.4 KiB
Plaintext

*** Settings ***
Documentation Integration smoke tests for ACMS v1 context assembly pipeline
Resource ${CURDIR}/common.resource
Suite Setup Setup Test Environment
Suite Teardown Cleanup Test Environment
*** Variables ***
${HELPER} ${CURDIR}/helper_acms_pipeline.py
*** Test Cases ***
Create Context Fragment
[Documentation] Create a ContextFragment and verify defaults
${result}= Run Process ${PYTHON} ${HELPER} fragment-create cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-fragment-ok
Calculate Budget Available Tokens
[Documentation] Create ContextBudget and verify available_tokens
${result}= Run Process ${PYTHON} ${HELPER} budget-calc cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-budget-ok
Assemble With Relevance Strategy
[Documentation] Assemble fragments with relevance strategy
${result}= Run Process ${PYTHON} ${HELPER} assemble-relevance cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-assemble-relevance-ok
Assemble With Recency Strategy
[Documentation] Assemble fragments with recency strategy
${result}= Run Process ${PYTHON} ${HELPER} assemble-recency cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-assemble-recency-ok
Assemble With Tiered Strategy
[Documentation] Assemble fragments with tiered strategy
${result}= Run Process ${PYTHON} ${HELPER} assemble-tiered cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-assemble-tiered-ok
Verify Payload Budget Check
[Documentation] Verify is_within_budget property on assembled payload
${result}= Run Process ${PYTHON} ${HELPER} payload-budget-check cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-payload-budget-ok
Assemble With Size Budget Context View
[Documentation] Verify max_file_size pre-filter and enforcement metadata
${result}= Run Process ${PYTHON} ${HELPER} assemble-size-budget cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-assemble-size-budget-ok
Skeleton Context Inheritance Parent To Child Plan
[Documentation] Verify parent plan context is compressed and propagated to child plan via SkeletonCompressor.
... Issue #3563: SkeletonCompressor must be invoked in assemble() so child plans receive non-empty skeleton_fragments.
${result}= Run Process ${PYTHON} ${HELPER} skeleton-context-inheritance cwd=${WORKSPACE}
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} acms-skeleton-inheritance-ok