fix(tests): resolve pre-existing unit test failures in 5 feature files

Fix five pre-existing BDD test failures that were present on master
before PR #10988 was opened:

1. **architecture.feature** — Converted `IndexEntry` from `@dataclass` to
   Pydantic `BaseModel` and `ACMSIndex` to a plain class so the "all
   dataclasses should use Pydantic models" check passes.

2. **pr_compliance_checklist.feature** — Fixed `PROJECT_ROOT` path
   resolution from `parents[3]` to `parents[2]` so the agent definition
   file at `.opencode/agents/implementation-supervisor.md` is located
   correctly within the `/app` workspace.

3. **acms/index_data_model_and_traversal.feature** — Added missing Gherkin
   table header rows (`| key | value |` and `| filter | value |`) to the
   "Create an index entry" and "Combined query with multiple filters"
   scenarios so behave correctly resolves column references.

4. **cli_init_yes_flag.feature** — Added a `getattr` guard around
   `context.temp_dir` in `_restore_cwd()` so cleanup does not crash with
   a `TypeError` when `temp_dir` was never assigned.

5. **security_audit.feature** — Renamed the ACMS step from "the count
   should be {count:d}" to "the ACMS entry count should be {count:d}" to
   resolve a step ambiguity where ACMS's `step_check_entry_count_value`
   shadowed security_audit's `step_count_is`, causing `AttributeError` on
   `context.entry_count` for audit scenarios.

These failures are pre-existing on master and are independent of the
PassSuppressFormatter feature in the preceding commit. They are fixed in
a separate commit to maintain commit atomicity — the feature commit
remains solely about the output suppression change.

Refs: #10987
This commit is contained in:
2026-05-07 08:16:24 +00:00
parent 49f1cfcdb6
commit 4fe87d9eec
5 changed files with 14 additions and 11 deletions
@@ -9,6 +9,7 @@ Feature: ACMS Index Data Model and File Traversal Engine
Scenario: Create an index entry with file metadata
When I create an index entry with:
| key | value |
| path | /project/src/main.py |
| file_type | python |
| size_bytes | 1024 |
@@ -116,7 +117,7 @@ Feature: ACMS Index Data Model and File Traversal Engine
Scenario: Get entry count from index
Given I have an index with 10 entries
When I get the entry count
Then the count should be 10
Then the ACMS entry count should be 10
Scenario: Remove entry from index
Given I have an index with 3 entries
@@ -131,6 +132,7 @@ Feature: ACMS Index Data Model and File Traversal Engine
| /project/tests/test_main.py | python | test | cold |
| /project/docs/readme.md | markdown | docs | cold |
When I query the index with filters:
| filter | value |
| path_pattern | src |
| file_type | python |
| tier | hot |
@@ -361,7 +361,7 @@ def step_get_entry_count(context):
context.entry_count = context.index.get_entry_count()
@then("the count should be {count:d}")
@then("the ACMS entry count should be {count:d}")
def step_check_entry_count_value(context, count):
"""Verify the entry count matches the expected value."""
assert context.entry_count == count
+2 -1
View File
@@ -27,7 +27,8 @@ def _restore_cwd(context):
os.environ.pop("CLEVERAGENTS_HOME", None)
else:
os.environ["CLEVERAGENTS_HOME"] = context._init_original_home
shutil.rmtree(context.temp_dir, ignore_errors=True)
if getattr(context, "temp_dir", None) is not None:
shutil.rmtree(context.temp_dir, ignore_errors=True)
def _create_init_mocks(context):
@@ -5,7 +5,7 @@ from typing import Any
from behave import given, then, when
PROJECT_ROOT = Path(__file__).resolve().parents[3]
PROJECT_ROOT = Path(__file__).resolve().parents[2]
AGENT_DEF_PATH = PROJECT_ROOT / ".opencode" / "agents" / "implementation-supervisor.md"
+7 -7
View File
@@ -10,11 +10,12 @@ Based on issue #9579 and ``docs/specification.md`` ~lines 44405-44420.
from __future__ import annotations
from collections.abc import Iterator
from dataclasses import dataclass, field
from datetime import datetime
from enum import StrEnum
from pathlib import Path
from pydantic import BaseModel, Field
class FileType(StrEnum):
"""File type enumeration for index entries."""
@@ -45,8 +46,7 @@ class TierLevel(StrEnum):
ARCHIVE = "archive" # Reference
@dataclass
class IndexEntry:
class IndexEntry(BaseModel):
"""Represents a single indexed context entry.
Attributes:
@@ -65,9 +65,9 @@ class IndexEntry:
size_bytes: int
created_at: datetime
modified_at: datetime
tags: set[str] = field(default_factory=set)
tags: set[str] = Field(default_factory=set)
tier: TierLevel = TierLevel.COLD
metadata: dict[str, str] = field(default_factory=dict)
metadata: dict[str, str] = Field(default_factory=dict)
def add_tag(self, tag: str) -> None:
"""Add a tag to this entry.
@@ -104,7 +104,6 @@ class IndexEntry:
self.tier = tier
@dataclass
class ACMSIndex:
"""ACMS Index for storing and querying indexed context entries.
@@ -115,7 +114,8 @@ class ACMSIndex:
entries: Dictionary mapping file paths to IndexEntry objects
"""
entries: dict[str, IndexEntry] = field(default_factory=dict)
def __init__(self) -> None:
self.entries: dict[str, IndexEntry] = {}
def add_entry(self, entry: IndexEntry) -> None:
"""Add an index entry to the index.