Close Round 03 selector review

This commit is contained in:
wantsong 2026-06-17 23:49:35 +08:00
parent cd9f63e9eb
commit 77114cee5b
22 changed files with 688 additions and 14 deletions

View File

@ -174,8 +174,8 @@ Files intended for GPT / CCRA upload inside a review bundle should include the r
## 13. Next Steps
1. Submit the Round 03.2 selector negative-gate patch for GPT / CCRA review.
1. Round 03 is closed after the Round 03.2a CCRA / GPT pass decision.
2. Keep QPI and Intellectual Archaeology at `draft / B / pending` until Owner / CCRA review accepts stronger status.
3. Run a QPI blind-test round with new unlabelled inputs only after Round 03.2 passes.
3. Start Round 04 blind input routing evaluation only after an explicit owner instruction; do not modify selector rules before that evaluation.
4. Defer any third-model expansion until the current QPI selector and case layer are accepted.
5. Route missing reusable extraction, inspection, or stability-scoring tools to `requirements/skills-vault/` or `requirements/ccpe/` instead of improvising local platform features.

View File

@ -145,6 +145,8 @@ QPI 必须区分:
- 不要展开
- 只改错别字
说明:`不要展开` / `不要深入分析` 默认抑制 QPI但如果同时出现 `只做 QPI`、`只做问题定性`、`只判断主导稀缺` 等限定分析意图,则允许 QPI 做窄范围判断,并拒绝进入思想考古。
## 相关模型
- `intellectual_archaeology`: 当 QPI 判断问题偏中重型难题或课题时,可进入思想考古做深度建模。
@ -202,7 +204,7 @@ QPI 的三分结构、核心匮乏物、主体性和动态性有清晰来源支
- 机制稳定性:中高,扫描匮乏物和匹配处理范式的机制明确。
- 边界清晰度:中等,混合型问题、多视角分歧和上下文不足场景仍需更多测试。
- 来源证据质量:较高,主体性和动态性来自 2025 原文,核心匮乏物和误框定规则来自 2026 原文,应用规则来自综合文档。
- 回归测试表现pending当前已有 55 条 QPI 回归用例;其中 Round 03 / 03.1 已纳入 owner-reviewed case layer、selector no-call、multi-perspective 和低上下文 provisional 边界用例Round 03.2 已纳入普通 how-to / 词义判断 no-call 陷阱。生命周期仍保持 draft。
- 回归测试表现pending当前已有 58 条 QPI 回归用例;其中 Round 03 / 03.1 已纳入 owner-reviewed case layer、selector no-call、multi-perspective 和低上下文 provisional 边界用例Round 03.2 已纳入普通 how-to / 词义判断 no-call 陷阱Round 03.2a 已纳入 depth-limiting QPI override 陷阱。生命周期仍保持 draft。
评级理由:三分结构清晰,适合作为入口路由模型,但需要补充大量边界案例,防止过度升维或降维。
@ -212,7 +214,7 @@ QPI 的三分结构、核心匮乏物、主体性和动态性有清晰来源支
`pending`
当前已有 55 条 QPI 回归用例,覆盖 positive、boundary、misuse、no_call、selector_gate 和 pipeline。Round 03 / 03.1 重点新增:
当前已有 58 条 QPI 回归用例,覆盖 positive、boundary、misuse、no_call、selector_gate 和 pipeline。Round 03 / 03.1 重点新增:
- owner-reviewed flow / disappointment / organizational year-end-review cases
- `case_qpi_international_logistics_no_call_001`
@ -228,6 +230,12 @@ Round 03.2 重点新增:
- `case_qpi_how_to_markdown_pdf_no_call_001`
- `case_qpi_dictionary_judgment_no_call_001`
Round 03.2a 重点新增:
- `case_qpi_depth_limited_qpi_only_001`
- `case_qpi_depth_limited_problem_definition_001`
- `case_qpi_depth_limited_dominant_scarcity_001`
## 示例输入
- “我们团队每次都说要长期主义,但一到季度 KPI 就回到短期动作,这到底是什么问题?”

View File

@ -0,0 +1,52 @@
# Round 03.2a CCRA Review Brief
Date: 2026-06-17
Repository: `C:\Users\wangq\Documents\Codex\work-projects\the-mindscape-of-bro-tsong`
Patch title: Depth-Limiting Override For QPI
## Scope
Round 03.2a is a micro-patch after GPT's Round 03.2 `REVISE-light` review.
It fixes one selector precedence issue:
> `不要展开` / `不要深入分析` should remain global no-call by default, but when paired with explicit QPI-limited intent such as `只做 QPI`, `只做问题定性`, or `只判断主导稀缺`, they should allow QPI and reject IA.
This patch does not:
- add a third model;
- upgrade QPI or Intellectual Archaeology lifecycle status;
- introduce an LLM selector;
- introduce RAG, database, frontend, backend, user accounts, or platform features;
- start Round 04 blind testing.
Current model status remains:
```text
qpi: draft / B / pending
intellectual_archaeology: draft / B / pending
```
## What Changed
1. Added `depth_limiting_no_call_signals`.
2. Added `qpi_limited_analysis_override_phrases`.
3. Modified hard no-call precedence so depth-limiting phrases do not globally no-call when QPI-limited intent is explicit.
4. Suppressed QPI's own depth-limiting negative penalty only in that explicit QPI-limited combination.
5. Expanded IA hard exclusion triggers to cover QPI-limited judgment phrases.
6. Added 3 selector regression cases and 5 calibration smoke inputs.
## Suggested Review Order
1. `00_OPEN_THIS_FIRST_CCRA_REVIEW_BRIEF_03.2a.md`
2. `01_PATCH_MATRIX_03.2a.md`
3. `02_CURRENT_ASSET_PACK_03.2a.md`
4. `03_VALIDATION_AND_COMMAND_LOG_03.2a.md`
5. `04_REVIEW_QUESTIONS_FOR_GPT_03.2a.md`
6. `optional_raw_changed_files_03.2a.zip` only if exact changed-file inspection is needed
## Primary Review Question
Does Round 03.2a close the depth-limiting override issue enough to close Round 03 and proceed to Round 04 blind input evaluation?

View File

@ -0,0 +1,43 @@
# Round 03.2a Patch Matrix
## GPT Requirement Mapping
| Requirement | Implementation | Files |
| --- | --- | --- |
| Add QPI-limited override phrases | Added `qpi_limited_analysis_override_phrases` | `selector/selector_rules.json` |
| Keep `不要展开` / `不要深入分析` as no-call by default | Added separate `depth_limiting_no_call_signals`; did not remove original hard no-call phrases | `selector/selector_rules.json` |
| Let QPI-limited depth requests continue scoring | Hard no-call branch now skips global no-call only when depth-limiting and QPI-limited phrases both hit | `scripts/run_selector_demo.py` |
| Do not let QPI's own negative trigger penalty suppress the override | Suppressed QPI depth-limiting penalty only for explicit QPI-limited combinations | `scripts/run_selector_demo.py` |
| IA must remain rejected | Added QPI-limited judgment phrases to IA hard exclusion triggers | `selector/selector_rules.json` |
| Add regression / calibration cases | Added 3 regression cases and 5 calibration inputs | `tests/qpi.regression.json`, `selector/selector_calibration_inputs.json` |
## Added Regression Cases
- `case_qpi_depth_limited_qpi_only_001`
- `case_qpi_depth_limited_problem_definition_001`
- `case_qpi_depth_limited_dominant_scarcity_001`
## Added Calibration Inputs
- `selector_calibration_qpi_depth_limited_qpi_only_001`
- `selector_calibration_qpi_depth_limited_problem_definition_001`
- `selector_calibration_qpi_depth_limited_problem_definition_002`
- `selector_calibration_qpi_depth_limited_problem_or_issue_001`
- `selector_calibration_qpi_depth_limited_dominant_scarcity_001`
## Current Counts
| Asset | Round 03.2 | Round 03.2a |
| --- | ---: | ---: |
| QPI regression cases | 55 | 58 |
| IA regression cases | 19 | 19 |
| Aggregate regression cases | 74 | 77 |
| Selector calibration inputs | 90 | 95 |
## Non-Goals Preserved
- No new model.
- No lifecycle upgrade.
- No LLM selector.
- No RAG / database / frontend / backend.
- No Round 04 blind-test execution.

View File

@ -0,0 +1,51 @@
# Round 03.2a Current Asset Pack
## Canonical Changed Assets
- `selector/selector_rules.json`
- `selector/selector_calibration_inputs.json`
- `tests/qpi.regression.json`
- `tests/regression_cases.json`
- `tests/regression_index.json`
- `scripts/run_selector_demo.py`
## Generated / Derived Assets
- `models/model_index.json`
- `cards/card_index.md`
- `reports/index_rebuild_report.md`
- `reports/validation_report.md`
- `reports/selector_regression_report_v0.2.md`
- `reports/selector_calibration_smoke_report.md`
- `reports/model_card_sync_report_v0.2.md`
## Documentation Updated
- `README.md`
- `docs/DECISIONS.md`
- `selector/README.md`
- `cards/qpi.md`
- `reports/content_review_report_v0.2.md`
## Required Behavior
The following inputs should now select QPI, reject IA, and set `no_call=false`:
```text
不要展开到思想考古,只做 QPI 复核。
不要展开到思想考古,只做问题定性。
不要深入分析,只做问题定性。
不要深入分析背后的理论,只判断这是问题还是课题。
不要展开,只判断主导稀缺。
```
Depth-limiting phrases without explicit QPI-limited intent remain no-call / low-depth signals.
## Current Lifecycle State
No lifecycle upgrade was made.
```text
qpi: draft / B / pending
intellectual_archaeology: draft / B / pending
```

View File

@ -0,0 +1,49 @@
# Round 03.2a Validation and Command Log
Date: 2026-06-17
## Red Evidence
After adding the 03.2a traps and before implementation, selector checks failed as expected.
`python scripts\run_selector_regression.py`
- `case_qpi_depth_limited_qpi_only_001`: expected primary QPI, got none.
- `case_qpi_depth_limited_problem_definition_001`: expected primary QPI, got none.
- `case_qpi_depth_limited_dominant_scarcity_001`: expected primary QPI, got none.
`python scripts\run_selector_calibration_smoke.py`
- five depth-limiting QPI override inputs failed with expected QPI selection missing.
## Green Verification
The following commands passed after the Round 03.2a patch:
```powershell
python scripts\rebuild_indexes.py --check
python -m unittest discover -s tests -p "test*.py" -v
python scripts\validate_model_library.py
python scripts\check_card_contract.py
python scripts\run_selector_demo.py
python scripts\run_selector_regression.py
python scripts\run_selector_calibration_smoke.py
python scripts\check_model_card_sync.py
```
Results:
- Index check: PASS
- Unit tests: PASS, 17 tests
- Model library validation: PASS
- Card contract: PASS
- Selector demo: PASS
- Selector regression: PASS
- Selector calibration smoke: PASS, 95 inputs, 0 failures, 0 warnings
- Model/card sync: PASS
## Important Interpretation
Validation pass does not mean model content is stable or owner-approved.
It only means the Round 03.2a selector precedence patch is structurally consistent and passes current local checks.

View File

@ -0,0 +1,27 @@
# Round 03.2a Review Questions for GPT
Please review Round 03.2a only.
Do not expand into Round 04 blind testing yet.
## Questions
1. Does the selector now correctly treat `不要展开 / 不要深入分析 + 只做 QPI / 只做问题定性` as QPI-limited analysis rather than global no-call?
2. Does IA remain properly rejected in all five depth-limiting override cases?
3. Is it acceptable that depth-limiting phrases without QPI-limited intent still remain no-call / low-depth signals?
4. Can Round 03 now be closed with the following conclusion?
```text
QPI and Intellectual Archaeology remain draft / B / pending.
QPI is accepted as a draft-callable routing asset at report level.
Selector v0.2 passes no-call, calibration smoke, model-level exclusion, QPI-before-IA, and depth-limiting override gates.
Proceed to Round 04 blind input evaluation.
```
## Suggested Answer Format
Please answer with:
- `pass`, `revise`, or `block`;
- specific failing cases if `revise` or `block`;
- whether Round 04 blind input evaluation may start after this patch.

View File

@ -0,0 +1,46 @@
# Round 03.2a Bundle File Manifest
## Review Files
- `00_OPEN_THIS_FIRST_CCRA_REVIEW_BRIEF_03.2a.md`
- `01_PATCH_MATRIX_03.2a.md`
- `02_CURRENT_ASSET_PACK_03.2a.md`
- `03_VALIDATION_AND_COMMAND_LOG_03.2a.md`
- `04_REVIEW_QUESTIONS_FOR_GPT_03.2a.md`
- `BUNDLE_FILE_MANIFEST_03.2a.md`
- `optional_raw_changed_files_03.2a.zip`
## Optional Raw Changed Files
The zip is optional and should be used only if exact file inspection is needed.
It preserves source-relative paths.
It excludes:
- `knowledge_assets/`
- `__pycache__/`
- `*.pyc`
- previous review bundle zip files
## Source-Relative Files Included in Raw Zip
- `README.md`
- `cards/qpi.md`
- `docs/DECISIONS.md`
- `reports/content_review_report_v0.2.md`
- `reports/Codex新会话交接文档_Round03.2a评审准备_2026-06-17.md`
- `reports/index_rebuild_report.md`
- `reports/model_card_sync_report_v0.2.md`
- `reports/selector_calibration_smoke_report.md`
- `reports/selector_regression_report_v0.2.md`
- `reports/validation_report.md`
- `scripts/run_selector_demo.py`
- `selector/README.md`
- `selector/selector_calibration_inputs.json`
- `selector/selector_rules.json`
- `tests/qpi.regression.json`
- `tests/regression_cases.json`
- `tests/regression_index.json`
- `models/model_index.json`
- `cards/card_index.md`

View File

@ -181,3 +181,36 @@ The current Round 03.2 implementation keeps this scoped:
- It does not add an LLM selector, RAG, database, service, frontend, backend, or third model.
- It preserves QPI explicit-analysis override, but QPI selection does not re-enable IA when IA is explicitly refused.
- Generic bare QPI gate words such as `如何` and `判断` are removed in favor of compound problem-definition phrases.
## Decision 015: Treat depth-limiting QPI requests as scoped analysis, not global no-call
Status: Accepted
Reason:
Round 03.2 review found that global hard no-call phrases such as `不要展开` and `不要深入分析` could incorrectly block QPI when the user also asked for a limited QPI action such as `只做 QPI`, `只做问题定性`, or `只判断主导稀缺`.
The correct interpretation is scoped depth control:
- `不要展开` or `不要深入分析` alone remains a no-call / low-depth signal.
- When paired with explicit QPI-limited intent, it means do not enter deeper models such as Intellectual Archaeology.
- QPI may still be selected for problem definition, problem-type judgment, or dominant-scarcity judgment.
- IA remains rejected through model-level hard exclusion.
This remains a selector precedence rule only. It does not add a new model, lifecycle upgrade, LLM selector, RAG, database, service, frontend, backend, user system, or Round 04 blind-test behavior.
## Decision 016: Close Round 03 after the Round 03.2a pass decision
Status: Accepted
Reason:
The Round 03.2a review accepted the depth-limiting QPI override patch and confirmed that Round 03 can close.
Closure statement:
- Round 03 is closed.
- QPI and Intellectual Archaeology remain `draft / B / pending`.
- QPI is accepted as a draft-callable routing asset at report level only; this does not change JSON model lifecycle status.
- Selector v0.2 passes no-call, calibration smoke, model-level exclusion, QPI-before-IA, and depth-limiting override gates.
- Round 04 blind input routing evaluation is the next candidate phase, but it is not started by this closure.

View File

@ -26,7 +26,7 @@
"card_file": "cards/qpi.md",
"source_article_count": 3,
"source_evidence_count": 10,
"regression_case_count": 55,
"regression_case_count": 58,
"stability_level": "B",
"regression_status": "pending",
"status": "draft",

View File

@ -0,0 +1,112 @@
# Codex 新会话交接文档Round 03.2a 评审准备与关闭记录
Date: 2026-06-17
Repository: `C:\Users\wangq\Documents\Codex\work-projects\the-mindscape-of-bro-tsong`
Current phase: `model_library_mvp`
## 1. 本轮目标
根据 GPT 对 Round 03.2 的 `REVISE-light` 评审意见,完成 03.2a 微修:
```text
不要展开 / 不要深入分析
+
只做 QPI / 只做问题定性 / 只判断主导稀缺
=
允许 QPI拒绝 IA不做全局 no-call
```
## 2. 已完成
- 新增 `depth_limiting_no_call_signals`
- 新增 `qpi_limited_analysis_override_phrases`
- 修改 selector hard no-call precedence
- depth-limiting phrase 单独出现时仍可 no-call
- depth-limiting phrase 与 QPI-limited intent 同时出现时继续评分;
- QPI 可被选中;
- IA 仍通过 hard exclusion 被拒绝。
- 避免 QPI 自身 negative trigger penalty 在该组合下把 QPI 压到阈值以下。
- 新增 3 条 QPI regression
- `case_qpi_depth_limited_qpi_only_001`
- `case_qpi_depth_limited_problem_definition_001`
- `case_qpi_depth_limited_dominant_scarcity_001`
- 新增 5 条 selector calibration input。
- 同步 aggregate regression、regression index、model/card index 和 reports。
- 生成 03.2a 评审包:
```text
ccra_review_bundle/round-03.2a_2026-06-17_depth-limiting-qpi-override-patch/
```
## 3. 当前计数
- QPI regression cases: 58
- Intellectual Archaeology regression cases: 19
- Aggregate regression cases: 77
- Selector calibration inputs: 95
模型状态没有升级:
```text
qpi: draft / B / pending
intellectual_archaeology: draft / B / pending
```
## 4. 验证结果
以下命令已通过:
```powershell
python scripts\rebuild_indexes.py --check
python -m unittest discover -s tests -p "test*.py" -v
python scripts\validate_model_library.py
python scripts\check_card_contract.py
python scripts\run_selector_demo.py
python scripts\run_selector_regression.py
python scripts\run_selector_calibration_smoke.py
python scripts\check_model_card_sync.py
```
结果:
- Index check: PASS
- Unit tests: PASS, 17 tests
- Model library validation: PASS
- Card contract: PASS
- Selector demo: PASS
- Selector regression: PASS
- Selector calibration smoke: PASS, 95 inputs, 0 failures, 0 warnings
- Model/card sync: PASS
## 5. 需要 GPT / Owner 判断
- Round 03.2a 已经由 GPT / CCRA 判断为 `pass`
- Round 03 系列可以正式关闭。
- Round 04 blind input evaluation 可以作为下一候选阶段,但本次关闭动作不进入 Round 04。
## 6. 建议下一步
1. 记录 Round 03 closure。
2. 提交并同步 Round 03.2a 工程资产、评审包、交接文档和关闭记录。
3. 仅在后续 Owner 明确要求时启动 Round 04 blind input evaluation启动前不修改 selector 规则。
## 7. Round 03 关闭结论
```text
Round 03 closed.
QPI and Intellectual Archaeology remain draft / B / pending.
QPI is accepted as a draft-callable routing asset at report level.
Selector v0.2 passes no-call, calibration smoke, model-level exclusion, QPI-before-IA, and depth-limiting override gates.
Round 04 blind input routing evaluation is not started in this closeout.
```
注意:`draft-callable` 只能作为评审报告语言,不改变 JSON model lifecycle status。
## 8. 本次关闭修复
- 按评审意见在 `cards/qpi.md` 补充 depth-limiting override 的说明:`不要展开` / `不要深入分析` 默认抑制 QPI但与 `只做 QPI`、`只做问题定性`、`只判断主导稀缺` 等限定分析意图组合时,允许 QPI 窄范围判断并拒绝思想考古。
- 在 `docs/DECISIONS.md` 记录 Round 03 关闭决策。
- 在 `README.md` 更新下一步状态Round 03 已关闭Round 04 只作为后续候选阶段,不在本轮启动。

View File

@ -2,7 +2,7 @@
Date: 2026-06-16
Status note: this report is a pre-case-promotion review snapshot. It remains useful for the v0.2 evidence / contract / selector baseline, but its regression counts do not reflect the Round 03 / 03.1 QPI owner-reviewed case promotion or the Round 03.2 selector negative-gate patch. Current regression counts are tracked in `tests/*.regression.json`, `models/model_index.json`, and the latest review bundle.
Status note: this report is a pre-case-promotion review snapshot. It remains useful for the v0.2 evidence / contract / selector baseline, but its regression counts do not reflect the Round 03 / 03.1 QPI owner-reviewed case promotion, the Round 03.2 selector negative-gate patch, or the Round 03.2a depth-limiting override patch. Current regression counts are tracked in `tests/*.regression.json`, `models/model_index.json`, and the latest review bundle.
## 1. 本轮修改摘要
@ -111,7 +111,7 @@ Coverage:
- 已覆盖误用、防误召回、no-call 和 pipeline gate。
- 仍需人工审查用例真实性和遗漏边界。
Round 03 / 03.1 / 03.2 update: QPI has since expanded to 55 regression cases after owner-reviewed case promotion, selector/no-call repair, and broad-gate no-call traps. Intellectual Archaeology has expanded to 19 regression cases after Round 03.2 IA hard-exclusion traps. This v0.2 table is retained as a historical baseline, not the current count.
Round 03 / 03.1 / 03.2 / 03.2a update: QPI has since expanded to 58 regression cases after owner-reviewed case promotion, selector/no-call repair, broad-gate no-call traps, and depth-limiting QPI override traps. Intellectual Archaeology has expanded to 19 regression cases after Round 03.2 IA hard-exclusion traps. This v0.2 table is retained as a historical baseline, not the current count.
## 6. Selector Regression 结论

View File

@ -4,7 +4,7 @@ Status: `PASS`
Command: `python scripts/run_selector_calibration_smoke.py`
Calibration inputs checked: 90
Calibration inputs checked: 95
Failures: 0
Warnings: 0
@ -99,4 +99,9 @@ Warnings: 0
- `selector_calibration_qpi_how_to_excel_no_call_001`: PASS; expected=no_call; selected=[]; no_call=True
- `selector_calibration_qpi_how_to_markdown_pdf_no_call_001`: PASS; expected=no_call; selected=[]; no_call=True
- `selector_calibration_qpi_dictionary_judgment_no_call_001`: PASS; expected=no_call; selected=[]; no_call=True
- `selector_calibration_qpi_depth_limited_qpi_only_001`: PASS; expected=select_qpi_reject_ia; selected=['qpi']; no_call=False
- `selector_calibration_qpi_depth_limited_problem_definition_001`: PASS; expected=select_qpi_reject_ia; selected=['qpi']; no_call=False
- `selector_calibration_qpi_depth_limited_problem_definition_002`: PASS; expected=select_qpi_reject_ia; selected=['qpi']; no_call=False
- `selector_calibration_qpi_depth_limited_problem_or_issue_001`: PASS; expected=select_qpi_reject_ia; selected=['qpi']; no_call=False
- `selector_calibration_qpi_depth_limited_dominant_scarcity_001`: PASS; expected=select_qpi_reject_ia; selected=['qpi']; no_call=False
- `selector_calibration_analysis_override_should_call_001`: PASS; expected=select_qpi; selected=['qpi']; no_call=False

View File

@ -2,7 +2,7 @@
Status: `PASS`
Cases checked: 18
Cases checked: 21
Failures: 0
## Cases
@ -24,4 +24,7 @@ Failures: 0
- `case_qpi_how_to_excel_no_call_001`: PASS; selected=[]; no_call=True
- `case_qpi_how_to_markdown_pdf_no_call_001`: PASS; selected=[]; no_call=True
- `case_qpi_dictionary_judgment_no_call_001`: PASS; selected=[]; no_call=True
- `case_qpi_depth_limited_qpi_only_001`: PASS; selected=['qpi']; no_call=False
- `case_qpi_depth_limited_problem_definition_001`: PASS; selected=['qpi']; no_call=False
- `case_qpi_depth_limited_dominant_scarcity_001`: PASS; selected=['qpi']; no_call=False
- `case_qpi_analysis_override_should_call_001`: PASS; selected=['qpi']; no_call=False

View File

@ -33,6 +33,12 @@ def hard_no_call_hits(user_input, global_rules):
return hit_any(user_input, signals)
def depth_limited_qpi_override_hits(user_input, global_rules):
depth_hits = hit_any(user_input, global_rules.get("depth_limiting_no_call_signals", []))
override_hits = hit_any(user_input, global_rules.get("qpi_limited_analysis_override_phrases", []))
return depth_hits, override_hits
def model_hard_exclusion_hits(user_input, model_rule):
return hit_any(user_input, model_rule.get("hard_exclusion_triggers", []))
@ -45,7 +51,9 @@ def score_model(model, model_rule, global_rules, user_input, task_type="", pipel
penalties = []
negative_hits = hit_any(user_input, model_rule.get("negative_triggers", [])) + hit_any(user_input, model.get("negative_triggers", []))
if negative_hits and not has_analysis_override(user_input, global_rules):
depth_hits, qpi_limited_hits = depth_limited_qpi_override_hits(user_input, global_rules)
suppress_qpi_depth_penalty = model_id == "qpi" and depth_hits and qpi_limited_hits
if negative_hits and not has_analysis_override(user_input, global_rules) and not suppress_qpi_depth_penalty:
penalty_key = "model_negative_penalty_qpi" if model_id == "qpi" else "model_negative_penalty_default"
score -= weights.get(penalty_key, 0.5)
penalties.append("negative trigger: " + "".join(sorted(set(negative_hits))[:4]))
@ -146,7 +154,14 @@ def recommend(root, user_input, task_type="", pipeline_position="", threshold=No
threshold = global_rules.get("no_call_threshold", 0.35) if threshold is None else threshold
no_call_hits = hard_no_call_hits(user_input, global_rules)
if global_rules.get("hard_no_call_first", True) and no_call_hits and not has_analysis_override(user_input, global_rules):
depth_hits, qpi_limited_hits = depth_limited_qpi_override_hits(user_input, global_rules)
has_depth_limited_qpi_override = bool(depth_hits and qpi_limited_hits)
if (
global_rules.get("hard_no_call_first", True)
and no_call_hits
and not has_analysis_override(user_input, global_rules)
and not has_depth_limited_qpi_override
):
return hard_no_call_result(root, user_input, no_call_hits)
model_rules = rules_by_model(selector_rules)

View File

@ -25,6 +25,11 @@ Round 03.2 selector rule:
- A hard exclusion rejects only the named model; it does not globally no-call the request.
- Generic bare QPI gate words such as `如何` and `判断` should not be used alone. Use compound problem-definition phrases instead.
Round 03.2a selector rule:
- Depth-limiting phrases such as `不要展开` and `不要深入分析` remain global no-call signals by default.
- If a depth-limiting phrase is paired with explicit QPI-limited intent such as `只做 QPI`, `只做问题定性`, or `只判断主导稀缺`, the selector should continue scoring, allow QPI, and still reject IA.
Current files:
- `selector_rules.json`

View File

@ -626,6 +626,41 @@
"expected_selector_behavior": "no_call",
"expected_notes": "Dictionary meaning request should not be routed to QPI by bare 判断."
},
{
"case_id": "selector_calibration_qpi_depth_limited_qpi_only_001",
"category": "round_03_2a_depth_limited_qpi_override",
"input": "不要展开到思想考古,只做 QPI 复核。",
"expected_selector_behavior": "select_qpi_reject_ia",
"expected_notes": "Depth-limiting phrase should not become global no-call when QPI-only intent is explicit."
},
{
"case_id": "selector_calibration_qpi_depth_limited_problem_definition_001",
"category": "round_03_2a_depth_limited_qpi_override",
"input": "不要展开到思想考古,只做问题定性。",
"expected_selector_behavior": "select_qpi_reject_ia",
"expected_notes": "Do not call IA, but still route to QPI for problem definition."
},
{
"case_id": "selector_calibration_qpi_depth_limited_problem_definition_002",
"category": "round_03_2a_depth_limited_qpi_override",
"input": "不要深入分析,只做问题定性。",
"expected_selector_behavior": "select_qpi_reject_ia",
"expected_notes": "Depth-limiting no-call phrase should be overridden by explicit QPI-limited problem definition."
},
{
"case_id": "selector_calibration_qpi_depth_limited_problem_or_issue_001",
"category": "round_03_2a_depth_limited_qpi_override",
"input": "不要深入分析背后的理论,只判断这是问题还是课题。",
"expected_selector_behavior": "select_qpi_reject_ia",
"expected_notes": "Problem-or-issue judgment is QPI-limited analysis, not global no-call."
},
{
"case_id": "selector_calibration_qpi_depth_limited_dominant_scarcity_001",
"category": "round_03_2a_depth_limited_qpi_override",
"input": "不要展开,只判断主导稀缺。",
"expected_selector_behavior": "select_qpi_reject_ia",
"expected_notes": "Dominant-scarcity-only judgment should select QPI and reject IA."
},
{
"case_id": "selector_calibration_analysis_override_should_call_001",
"category": "round_03_1_analysis_override",

View File

@ -35,6 +35,18 @@
"不用解释",
"生成图片"
],
"depth_limiting_no_call_signals": [
"不要展开",
"不要深入分析"
],
"qpi_limited_analysis_override_phrases": [
"只做 QPI",
"只做问题定性",
"只做问题定性复核",
"只判断主导稀缺",
"只判断这是问题还是课题",
"只判断问题类型"
],
"direct_execution_no_call_signals": [
"排一下",
"排床位",
@ -217,7 +229,11 @@
"不要调用思想考古",
"不调用思想考古",
"只做 QPI",
"只做问题定性"
"只做问题定性",
"只做问题定性复核",
"只判断主导稀缺",
"只判断这是问题还是课题",
"只判断问题类型"
],
"pipeline_position": "modeling_depth_analysis",
"selection_priority": 7,

View File

@ -1634,6 +1634,93 @@
"evaluation_mode": "structured",
"notes": "Round 03.2 no-call trap: dictionary judgment is not QPI."
},
{
"case_id": "case_qpi_depth_limited_qpi_only_001",
"model_id": "qpi",
"case_type": "selector_gate",
"input": "不要展开到思想考古,只做 QPI 复核。",
"expected_behavior": "应选择 QPI 并拒绝 IA“不要展开”在此表示限制深度不是全局 no-call。",
"failure_signal": "selector 返回 no_call=true 或选中 IA。",
"expected_output_elements": [
"selected=qpi",
"rejected=intellectual_archaeology",
"no_call=false"
],
"should_call_model": true,
"expected_primary_model": "qpi",
"negative_expected_models": [
"intellectual_archaeology"
],
"expected_classification": "mixed",
"expected_dominant_scarcity": "unknown",
"expected_max_depth": "not_applicable",
"minimum_required_elements": [
"depth_limited_qpi_override"
],
"forbidden_elements": [
"global_no_call"
],
"evaluation_mode": "structured",
"notes": "Round 03.2a depth-limiting override trap: global no-call phrase plus QPI-only intent."
},
{
"case_id": "case_qpi_depth_limited_problem_definition_001",
"model_id": "qpi",
"case_type": "selector_gate",
"input": "不要深入分析,只做问题定性。",
"expected_behavior": "应选择 QPI 并拒绝 IA“不要深入分析”限制深度但问题定性仍需要 QPI。",
"failure_signal": "selector 返回 no_call=true 或选中 IA。",
"expected_output_elements": [
"selected=qpi",
"rejected=intellectual_archaeology",
"no_call=false"
],
"should_call_model": true,
"expected_primary_model": "qpi",
"negative_expected_models": [
"intellectual_archaeology"
],
"expected_classification": "mixed",
"expected_dominant_scarcity": "unknown",
"expected_max_depth": "not_applicable",
"minimum_required_elements": [
"depth_limited_problem_definition"
],
"forbidden_elements": [
"global_no_call"
],
"evaluation_mode": "structured",
"notes": "Round 03.2a depth-limiting override trap: limited problem definition should route to QPI."
},
{
"case_id": "case_qpi_depth_limited_dominant_scarcity_001",
"model_id": "qpi",
"case_type": "selector_gate",
"input": "不要展开,只判断主导稀缺。",
"expected_behavior": "应选择 QPI 并拒绝 IA主导稀缺判断属于 QPI 限定分析。",
"failure_signal": "selector 返回 no_call=true 或选中 IA。",
"expected_output_elements": [
"selected=qpi",
"rejected=intellectual_archaeology",
"no_call=false"
],
"should_call_model": true,
"expected_primary_model": "qpi",
"negative_expected_models": [
"intellectual_archaeology"
],
"expected_classification": "mixed",
"expected_dominant_scarcity": "unknown",
"expected_max_depth": "not_applicable",
"minimum_required_elements": [
"dominant_scarcity_gate"
],
"forbidden_elements": [
"global_no_call"
],
"evaluation_mode": "structured",
"notes": "Round 03.2a depth-limiting override trap: dominant-scarcity-only judgment should route to QPI."
},
{
"case_id": "case_qpi_analysis_override_should_call_001",
"model_id": "qpi",

View File

@ -1633,6 +1633,93 @@
"evaluation_mode": "structured",
"notes": "Round 03.2 no-call trap: dictionary judgment is not QPI."
},
{
"case_id": "case_qpi_depth_limited_qpi_only_001",
"model_id": "qpi",
"case_type": "selector_gate",
"input": "不要展开到思想考古,只做 QPI 复核。",
"expected_behavior": "应选择 QPI 并拒绝 IA“不要展开”在此表示限制深度不是全局 no-call。",
"failure_signal": "selector 返回 no_call=true 或选中 IA。",
"expected_output_elements": [
"selected=qpi",
"rejected=intellectual_archaeology",
"no_call=false"
],
"should_call_model": true,
"expected_primary_model": "qpi",
"negative_expected_models": [
"intellectual_archaeology"
],
"expected_classification": "mixed",
"expected_dominant_scarcity": "unknown",
"expected_max_depth": "not_applicable",
"minimum_required_elements": [
"depth_limited_qpi_override"
],
"forbidden_elements": [
"global_no_call"
],
"evaluation_mode": "structured",
"notes": "Round 03.2a depth-limiting override trap: global no-call phrase plus QPI-only intent."
},
{
"case_id": "case_qpi_depth_limited_problem_definition_001",
"model_id": "qpi",
"case_type": "selector_gate",
"input": "不要深入分析,只做问题定性。",
"expected_behavior": "应选择 QPI 并拒绝 IA“不要深入分析”限制深度但问题定性仍需要 QPI。",
"failure_signal": "selector 返回 no_call=true 或选中 IA。",
"expected_output_elements": [
"selected=qpi",
"rejected=intellectual_archaeology",
"no_call=false"
],
"should_call_model": true,
"expected_primary_model": "qpi",
"negative_expected_models": [
"intellectual_archaeology"
],
"expected_classification": "mixed",
"expected_dominant_scarcity": "unknown",
"expected_max_depth": "not_applicable",
"minimum_required_elements": [
"depth_limited_problem_definition"
],
"forbidden_elements": [
"global_no_call"
],
"evaluation_mode": "structured",
"notes": "Round 03.2a depth-limiting override trap: limited problem definition should route to QPI."
},
{
"case_id": "case_qpi_depth_limited_dominant_scarcity_001",
"model_id": "qpi",
"case_type": "selector_gate",
"input": "不要展开,只判断主导稀缺。",
"expected_behavior": "应选择 QPI 并拒绝 IA主导稀缺判断属于 QPI 限定分析。",
"failure_signal": "selector 返回 no_call=true 或选中 IA。",
"expected_output_elements": [
"selected=qpi",
"rejected=intellectual_archaeology",
"no_call=false"
],
"should_call_model": true,
"expected_primary_model": "qpi",
"negative_expected_models": [
"intellectual_archaeology"
],
"expected_classification": "mixed",
"expected_dominant_scarcity": "unknown",
"expected_max_depth": "not_applicable",
"minimum_required_elements": [
"dominant_scarcity_gate"
],
"forbidden_elements": [
"global_no_call"
],
"evaluation_mode": "structured",
"notes": "Round 03.2a depth-limiting override trap: dominant-scarcity-only judgment should route to QPI."
},
{
"case_id": "case_qpi_analysis_override_should_call_001",
"model_id": "qpi",

View File

@ -7,14 +7,14 @@
{
"model_id": "qpi",
"regression_file": "tests/qpi.regression.json",
"case_count": 55,
"case_count": 58,
"case_type_counts": {
"boundary": 13,
"misuse": 16,
"no_call": 6,
"pipeline": 1,
"positive": 16,
"selector_gate": 3
"selector_gate": 6
}
},
{