fix(feedback): remove order-dependent import and stale layout pointers

model.py imported its exceptions from the package __init__, which itself
imports model -- a cycle that only resolved because __init__ happens to
import exceptions first. Import them from the exceptions submodule
directly, matching service.py, so reordering __init__ can never break
collection.

Also update the two module docstrings that still pointed readers at the
deleted app/infra/ layout and the old deps.py wiring: adapters live in
app/adapters/{context}/ and wiring happens in the composition root,
app/composition.py::build_domain_services.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
rayhpeng 2026-07-30 11:12:31 +08:00
parent 533d02b1ab
commit 597a11372e
3 changed files with 5 additions and 4 deletions

View File

@ -5,5 +5,6 @@ Every package under this namespace is one bounded context laid out as
dependencies -- no sqlalchemy/fastapi/pydantic, no `app.*`, and no dependencies -- no sqlalchemy/fastapi/pydantic, no `app.*`, and no
harness infrastructure modules (enforced in CI by harness infrastructure modules (enforced in CI by
`tests/test_harness_domain_purity.py`). Adapters implementing the ports `tests/test_harness_domain_purity.py`). Adapters implementing the ports
live in `app/infra/`; wiring happens only in `app/gateway/deps.py`. live in `app/adapters/{context}/`; wiring happens only in the composition
root, `app/composition.py::build_domain_services`.
""" """

View File

@ -4,7 +4,7 @@ import uuid
from dataclasses import dataclass, field from dataclasses import dataclass, field
from datetime import UTC, datetime from datetime import UTC, datetime
from deerflow.domain.feedback import InvalidRatingError, InvalidTagError from deerflow.domain.feedback.exceptions import InvalidRatingError, InvalidTagError
VALID_RATINGS = (-1, 1) VALID_RATINGS = (-1, 1)

View File

@ -2,8 +2,8 @@
The legacy SQL repository was replaced by the hexagonal slice: The legacy SQL repository was replaced by the hexagonal slice:
port `deerflow.domain.feedback.ports.FeedbackRepository`, adapter port `deerflow.domain.feedback.ports.FeedbackRepository`, adapter
`app.infra.persistence.feedback.SqlFeedbackRepository`. The ORM row stays `app.adapters.feedback.feedback_repository.SqlFeedbackRepository`. The ORM
here until PR-N moves engine/models/migrations into app/infra. row stays here beside the harness-owned engine/models/migrations.
""" """
from deerflow.persistence.feedback.model import FeedbackRow from deerflow.persistence.feedback.model import FeedbackRow