agent-spec 0.3.0

AI-native BDD/Spec verification tool for contract-driven agent coding
spec: task
name: "修复继承链解析入口"
inherits: project
tags: [bootstrap, parser, gateway, cli]
---

## 意图

让磁盘上的任务级 `.spec` 能直接继承同目录的 `project.spec`,
使 `agent-spec` 可以先用自己的项目规则约束自己,再执行具体任务。

## 已定决策

- 磁盘入口优先从当前 spec 文件所在目录解析父级规格
- 继承链修复必须同时覆盖 gateway 与 CLI 行为
- 计划阶段产出的 Task Contract 必须包含继承得到的项目级约束

## 边界

### 允许修改
- src/spec_parser/**
- src/spec_gateway/**
- src/**

### 禁止做
- 不要硬编码仓库绝对路径
- 不要让普通磁盘用例手工传入 `search_dirs`
- 不要破坏 `from_input` 这种无文件路径的入口

## 完成条件

场景: 同目录继承 project 规格
  测试: test_load_resolves_inherited_constraints_from_spec_directory
  假设 临时目录中存在 `project.spec` 和 `task.spec`
  并且 `task.spec` 声明 `inherits: project`
  当 `SpecGateway::load` 读取 `task.spec`
  那么 解析结果中包含来自 `project.spec` 的约束
  并且 Task Contract 输出中也包含这些继承约束

场景: 磁盘入口不需要手工搜索路径
  测试: resolves_parent_from_source_directory_when_no_search_dirs_are_provided
  假设 用户直接运行 `agent-spec contract task.spec`
  当 该 `task.spec` 与 `project.spec` 位于同一目录
  那么 CLI 可以完成继承解析
  并且 用户不需要再手工提供 `search_dirs`

场景: 内存入口保持原样
  测试: test_full_lifecycle
  假设 调用 `SpecGateway::from_input`
  当 输入内容本身不包含继承链
  那么 该入口继续可用
  并且 行为与修复前保持一致