Spaces:
Running
Running
S1-R1 research intent moderation authority closure
#122
by GuXiaopeng - opened
- core/generation_runner.py +27 -0
- core/study_design_contract.py +57 -3
- i18n.py +4 -4
core/generation_runner.py
CHANGED
|
@@ -1216,6 +1216,25 @@ class GenerationRunner:
|
|
| 1216 |
blocking.append(row)
|
| 1217 |
return blocking, advisory
|
| 1218 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1219 |
@classmethod
|
| 1220 |
def _partition_section_violations_by_lineage(
|
| 1221 |
cls, rows, lineage_attempts, *, section_name: str = "", mode: str = "",
|
|
@@ -5194,6 +5213,10 @@ The previous attempt for this same manuscript unit was rejected by validation. R
|
|
| 5194 |
full_draft_en, hypothesis_ledger, section_name="Full Manuscript", require_all=True
|
| 5195 |
)
|
| 5196 |
if hypothesis_rows:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5197 |
self._record_adaptive_completion_residual(
|
| 5198 |
quality_notes, hypothesis_rows, section_name="Full Manuscript", stage="final_hypothesis_review"
|
| 5199 |
)
|
|
@@ -5407,6 +5430,10 @@ The previous attempt for this same manuscript unit was rejected by validation. R
|
|
| 5407 |
full_draft_en, hypothesis_ledger, section_name="Full Manuscript", require_all=True
|
| 5408 |
)
|
| 5409 |
if post_front_hypothesis_rows:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5410 |
self._record_adaptive_completion_residual(
|
| 5411 |
quality_notes, post_front_hypothesis_rows, section_name="Final Abstract",
|
| 5412 |
stage="post_front_matter_hypothesis_review"
|
|
|
|
| 1216 |
blocking.append(row)
|
| 1217 |
return blocking, advisory
|
| 1218 |
|
| 1219 |
+
@classmethod
|
| 1220 |
+
def _raise_if_fatal_completion_residual(
|
| 1221 |
+
cls, rows, *, section_name: str = "", mode: str = "", error_code: str = "final_validation_unresolved"
|
| 1222 |
+
) -> None:
|
| 1223 |
+
"""Fail closed only for residuals already classified as FATAL.
|
| 1224 |
+
|
| 1225 |
+
Adaptive completion may retain advisory diagnostics, but it must never
|
| 1226 |
+
downgrade hypothesis identity or other fatal correctness contracts into
|
| 1227 |
+
a shippable manuscript.
|
| 1228 |
+
"""
|
| 1229 |
+
fatal = [
|
| 1230 |
+
row for row in list(rows or [])
|
| 1231 |
+
if cls._section_violation_severity(
|
| 1232 |
+
row, section_name=section_name, mode=mode, exhausted=True
|
| 1233 |
+
) == "FATAL"
|
| 1234 |
+
]
|
| 1235 |
+
if fatal:
|
| 1236 |
+
raise RuntimeError(f"{error_code}:{fatal[:4]}")
|
| 1237 |
+
|
| 1238 |
@classmethod
|
| 1239 |
def _partition_section_violations_by_lineage(
|
| 1240 |
cls, rows, lineage_attempts, *, section_name: str = "", mode: str = "",
|
|
|
|
| 5213 |
full_draft_en, hypothesis_ledger, section_name="Full Manuscript", require_all=True
|
| 5214 |
)
|
| 5215 |
if hypothesis_rows:
|
| 5216 |
+
self._raise_if_fatal_completion_residual(
|
| 5217 |
+
hypothesis_rows, section_name="Full Manuscript", mode=mode,
|
| 5218 |
+
error_code="final_hypothesis_contract_unresolved"
|
| 5219 |
+
)
|
| 5220 |
self._record_adaptive_completion_residual(
|
| 5221 |
quality_notes, hypothesis_rows, section_name="Full Manuscript", stage="final_hypothesis_review"
|
| 5222 |
)
|
|
|
|
| 5430 |
full_draft_en, hypothesis_ledger, section_name="Full Manuscript", require_all=True
|
| 5431 |
)
|
| 5432 |
if post_front_hypothesis_rows:
|
| 5433 |
+
self._raise_if_fatal_completion_residual(
|
| 5434 |
+
post_front_hypothesis_rows, section_name="Full Manuscript", mode=mode,
|
| 5435 |
+
error_code="post_front_matter_hypothesis_contract_unresolved"
|
| 5436 |
+
)
|
| 5437 |
self._record_adaptive_completion_residual(
|
| 5438 |
quality_notes, post_front_hypothesis_rows, section_name="Final Abstract",
|
| 5439 |
stage="post_front_matter_hypothesis_review"
|
core/study_design_contract.py
CHANGED
|
@@ -408,7 +408,14 @@ def _append_relation(relations: list[dict[str, Any]], *, rtype: str, source: str
|
|
| 408 |
def _reconcile_explicit_quantitative_intent(
|
| 409 |
*, topic: str, keywords: Any, constructs: list[dict[str, Any]], relations: list[dict[str, Any]], decisions: list[dict[str, Any]]
|
| 410 |
) -> dict[str, Any]:
|
| 411 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 412 |
intent = build_user_research_intent(topic, keywords, mode="quantitative")
|
| 413 |
explicit = set(intent.get("explicit_relation_types") or [])
|
| 414 |
if not explicit:
|
|
@@ -423,9 +430,11 @@ def _reconcile_explicit_quantitative_intent(
|
|
| 423 |
|
| 424 |
if "moderation" in explicit:
|
| 425 |
moderator_ids = ids_for("moderator")
|
| 426 |
-
#
|
| 427 |
-
#
|
|
|
|
| 428 |
moderator_label = _phrase_bound_intent_label(intent_text, labels, "moderation")
|
|
|
|
| 429 |
if not moderator_label:
|
| 430 |
noncore_labels = [
|
| 431 |
str(row.get("label") or "") for row in constructs
|
|
@@ -441,7 +450,33 @@ def _reconcile_explicit_quantitative_intent(
|
|
| 441 |
moderator_id = moderator_ids[0]
|
| 442 |
else:
|
| 443 |
moderator_id = ""
|
|
|
|
| 444 |
if moderator_id:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 445 |
direct = [r for r in relations if r.get("type") == "direct_association"]
|
| 446 |
predictor_ids, outcome_ids = ids_for("predictor"), ids_for("outcome")
|
| 447 |
preferred = next((r for r in direct if r.get("source") in predictor_ids and r.get("target") in outcome_ids), None)
|
|
@@ -453,6 +488,21 @@ def _reconcile_explicit_quantitative_intent(
|
|
| 453 |
if len(relations) > before:
|
| 454 |
decisions.append({"reason":"explicit_user_moderation_reconciled","moderator":moderator_id,"source":source,"target":target})
|
| 455 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 456 |
if "mediation" in explicit or "serial_mediation" in explicit or "parallel_mediation" in explicit:
|
| 457 |
mediator_ids = ids_for("mediator")
|
| 458 |
mediator_label = _phrase_bound_intent_label(intent_text, labels, "mediation") or _closest_intent_label(intent_text, labels, _MEDIATION_CUES)
|
|
@@ -824,6 +874,10 @@ def build_quantitative_front_matter_contract(contract: dict[str, Any], *, versio
|
|
| 824 |
"policy": "adaptive_study_design_frozen_semantic_authority",
|
| 825 |
"source_topic": str((contract or {}).get("source_topic") or ""),
|
| 826 |
"source_keywords": list((contract or {}).get("source_keywords") or []),
|
|
|
|
|
|
|
|
|
|
|
|
|
| 827 |
"construct_roles": construct_roles,
|
| 828 |
"constructs": role_map,
|
| 829 |
"construct_items": items,
|
|
|
|
| 408 |
def _reconcile_explicit_quantitative_intent(
|
| 409 |
*, topic: str, keywords: Any, constructs: list[dict[str, Any]], relations: list[dict[str, Any]], decisions: list[dict[str, Any]]
|
| 410 |
) -> dict[str, Any]:
|
| 411 |
+
"""Make explicit user design intent canonical rather than merely additive.
|
| 412 |
+
|
| 413 |
+
R7-R2C-R5 restored omitted mediation/moderation relations, but an upstream
|
| 414 |
+
model could still leave contradictory relations in place. S1-R1 closes
|
| 415 |
+
that authority gap: when the user explicitly names a moderator, model-
|
| 416 |
+
assigned alternative moderators are advisory proposals and are removed
|
| 417 |
+
before the canonical user relation is compiled.
|
| 418 |
+
"""
|
| 419 |
intent = build_user_research_intent(topic, keywords, mode="quantitative")
|
| 420 |
explicit = set(intent.get("explicit_relation_types") or [])
|
| 421 |
if not explicit:
|
|
|
|
| 430 |
|
| 431 |
if "moderation" in explicit:
|
| 432 |
moderator_ids = ids_for("moderator")
|
| 433 |
+
# A phrase-bound moderator named by the user is canonical authority.
|
| 434 |
+
# Model-assigned moderator roles/relations may not coexist when they
|
| 435 |
+
# contradict that explicit identity.
|
| 436 |
moderator_label = _phrase_bound_intent_label(intent_text, labels, "moderation")
|
| 437 |
+
authoritative_named_moderator = bool(moderator_label)
|
| 438 |
if not moderator_label:
|
| 439 |
noncore_labels = [
|
| 440 |
str(row.get("label") or "") for row in constructs
|
|
|
|
| 450 |
moderator_id = moderator_ids[0]
|
| 451 |
else:
|
| 452 |
moderator_id = ""
|
| 453 |
+
|
| 454 |
if moderator_id:
|
| 455 |
+
if authoritative_named_moderator:
|
| 456 |
+
# Remove only the conflicting moderator role. Other legitimate
|
| 457 |
+
# roles (e.g. predictor/main-effect participation) are preserved.
|
| 458 |
+
for row in constructs:
|
| 459 |
+
if str(row.get("construct_id") or "") == moderator_id:
|
| 460 |
+
continue
|
| 461 |
+
roles = list(row.get("roles") or [])
|
| 462 |
+
if "moderator" in roles:
|
| 463 |
+
row["roles"] = [role for role in roles if role != "moderator"]
|
| 464 |
+
|
| 465 |
+
removed = []
|
| 466 |
+
retained = []
|
| 467 |
+
for relation in relations:
|
| 468 |
+
if relation.get("type") == "moderation" and str(relation.get("moderator") or "") != moderator_id:
|
| 469 |
+
removed.append(dict(relation))
|
| 470 |
+
continue
|
| 471 |
+
retained.append(relation)
|
| 472 |
+
if removed:
|
| 473 |
+
relations[:] = retained
|
| 474 |
+
decisions.append({
|
| 475 |
+
"reason": "conflicting_model_moderation_removed_by_explicit_user_authority",
|
| 476 |
+
"moderator": moderator_id,
|
| 477 |
+
"removed_relation_ids": [str(row.get("relation_id") or "") for row in removed],
|
| 478 |
+
})
|
| 479 |
+
|
| 480 |
direct = [r for r in relations if r.get("type") == "direct_association"]
|
| 481 |
predictor_ids, outcome_ids = ids_for("predictor"), ids_for("outcome")
|
| 482 |
preferred = next((r for r in direct if r.get("source") in predictor_ids and r.get("target") in outcome_ids), None)
|
|
|
|
| 488 |
if len(relations) > before:
|
| 489 |
decisions.append({"reason":"explicit_user_moderation_reconciled","moderator":moderator_id,"source":source,"target":target})
|
| 490 |
|
| 491 |
+
if authoritative_named_moderator:
|
| 492 |
+
# After removing contradictory model hypotheses, close any H-number
|
| 493 |
+
# gap deterministically. This is identity normalization only; it
|
| 494 |
+
# does not change relation semantics or create extra hypotheses.
|
| 495 |
+
numbered = [
|
| 496 |
+
(idx, row) for idx, row in enumerate(relations)
|
| 497 |
+
if row.get("numbered_hypothesis", True) and row.get("type") != "control_effect"
|
| 498 |
+
]
|
| 499 |
+
numbered.sort(key=lambda item: (
|
| 500 |
+
int(item[1].get("hypothesis_order")) if str(item[1].get("hypothesis_order") or "").isdigit() else 10**6,
|
| 501 |
+
item[0],
|
| 502 |
+
))
|
| 503 |
+
for order, (_idx, row) in enumerate(numbered, start=1):
|
| 504 |
+
row["hypothesis_order"] = order
|
| 505 |
+
|
| 506 |
if "mediation" in explicit or "serial_mediation" in explicit or "parallel_mediation" in explicit:
|
| 507 |
mediator_ids = ids_for("mediator")
|
| 508 |
mediator_label = _phrase_bound_intent_label(intent_text, labels, "mediation") or _closest_intent_label(intent_text, labels, _MEDIATION_CUES)
|
|
|
|
| 874 |
"policy": "adaptive_study_design_frozen_semantic_authority",
|
| 875 |
"source_topic": str((contract or {}).get("source_topic") or ""),
|
| 876 |
"source_keywords": list((contract or {}).get("source_keywords") or []),
|
| 877 |
+
# S1-R1: compatibility front-matter metadata must carry the complete
|
| 878 |
+
# R5/R6 user Research Intent Authority. Without it a degraded final
|
| 879 |
+
# reconciliation can silently synthesize a different title/keyword set.
|
| 880 |
+
"user_research_intent": dict((contract or {}).get("user_research_intent") or {}),
|
| 881 |
"construct_roles": construct_roles,
|
| 882 |
"constructs": role_map,
|
| 883 |
"construct_items": items,
|
i18n.py
CHANGED
|
@@ -325,7 +325,7 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 325 |
"literature_insufficient": "当前没有检索到可用于形成有效参考文献列表的直接相关文献。系统未使用无关文献凑数。请检查研究题目、关键词或补充核心文献后重试。",
|
| 326 |
"upstream_translation_stopped": "英文母稿未形成可交付的有效参考文献列表,因此后续翻译已停止;当前页面中已显示的译文不是完整论文。",
|
| 327 |
"evidence_limited_running": "文献证据覆盖提示:当前主题可能较前沿、较小众或具有较强跨学科特征,因此数据库中能够直接核验的高相关文献可能较少。这不会中断论文生成,也不代表研究价值不足。系统将继续完成论文,并坚持不使用无关或无法核验的文献凑数。建议后续结合领域核心文献进一步完善;对尚未被充分研究的问题保持探索,可能形成有价值的学术贡献。",
|
| 328 |
-
"evidence_limited_completed": "论文已完整生成。当前主题
|
| 329 |
"node_error_detail": "错误代码:{code}|{error}|系统已保存断点,可继续恢复。",
|
| 330 |
"task_cancelled": "任务已取消,断点和临时文件已删除。",
|
| 331 |
"task_start_failed": "无法启动论文任务:{error}",
|
|
@@ -535,7 +535,7 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 535 |
"literature_insufficient": "No directly relevant literature was retrieved that can support a valid final reference list. Unrelated sources were not used to fill a quota. Check the topic or keywords, or provide relevant core literature, and try again.",
|
| 536 |
"upstream_translation_stopped": "The English source manuscript could not form a deliverable validated reference list, so downstream translation stopped. Any translated text currently shown is incomplete and is not a final paper.",
|
| 537 |
"evidence_limited_running": "Literature-evidence coverage notice: this topic may be frontier, niche, or strongly interdisciplinary, so databases may contain relatively few high-relevance sources that can be directly validated. This will not interrupt manuscript generation and does not imply low research value. The system will continue the paper without padding it with irrelevant or unverifiable references. Consider adding core field literature later; careful exploration of under-studied questions may yield a valuable academic contribution.",
|
| 538 |
-
"evidence_limited_completed": "The paper
|
| 539 |
"node_error_detail": "Error code: {code} | {error} | A checkpoint has been saved and can be resumed.",
|
| 540 |
"task_cancelled": "The task was cancelled. Its checkpoint and temporary files were deleted.",
|
| 541 |
"task_start_failed": "The paper task could not be started: {error}",
|
|
@@ -745,7 +745,7 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 745 |
"literature_insufficient": "Не удалось найти прямо релевантную литературу, достаточную для формирования валидного итогового списка источников. Система не использовала не��елевантные публикации ради количества. Проверьте тему и ключевые слова либо добавьте релевантные основные источники и повторите попытку.",
|
| 746 |
"upstream_translation_stopped": "Для английской исходной рукописи не удалось сформировать пригодный к выдаче валидный список источников, поэтому дальнейший перевод остановлен. Уже показанный перевод неполный и не является окончательной статьёй.",
|
| 747 |
"evidence_limited_running": "Уведомление о литературных доказательствах: тема может быть передовой, узкоспециализированной или междисциплинарной, поэтому в базах данных может быть немного высокорелевантных источников, которые удаётся напрямую подтвердить. Это не остановит создание статьи и не означает низкую научную ценность исследования. Система продолжит работу и не будет добавлять нерелевантные или непроверяемые источники ради количества. Позднее рекомендуется дополнить основную литературу по области; тщательное изучение недостаточно исследованных вопросов может дать ценный научный вклад.",
|
| 748 |
-
"evidence_limited_completed": "Статья полностью сформирована
|
| 749 |
"node_error_detail": "Код ошибки: {code} | {error} | Контрольная точка сохранена; работу можно продолжить.",
|
| 750 |
"task_cancelled": "Задача отменена. Контрольная точка и временные файлы удалены.",
|
| 751 |
"task_start_failed": "Не удалось запустить подготовку статьи: {error}",
|
|
@@ -955,7 +955,7 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 955 |
"literature_insufficient": "Жарамды соңғы әдебиеттер тізімін құруға жеткілікті тікелей релевантты әдебиет табылмады. Жүйе санды толтыру үшін қатысы жоқ дереккөздерді пайдаланбады. Тақырып пен кілт сөздерді тексеріңіз немесе релевантты негізгі әдебиетті қосып, қайта көріңіз.",
|
| 956 |
"upstream_translation_stopped": "Ағылшын бастапқы қолжазбасы үшін жеткізуге жарамды тексерілген әдебиеттер тізімі қалыптаспады, сондықтан кейінгі аударма тоқтатылды. Қазір көрсетілген аударма толық емес және соңғы мақала болып саналмайды.",
|
| 957 |
"evidence_limited_running": "Әдеби дәлелдер туралы ескерту: тақырып өте жаңа, тар ауқымды немесе пәнаралық болуы мүмкін, сондықтан дерекқорларда тікелей тексеруге болатын жоғары релевантты еңбектер аз кездесуі ықтимал. Бұл мақала жасауды тоқтатпайды және зерттеудің ғылыми құндылығы төмен дегенді білдірмейді. Жүйе жұмысты жалғастырады және санды толтыру үшін қатысы жоқ немесе тексерілмейтін дереккөздерді қоспайды. Кейін саланың негізгі әдебиетін толықтырған жөн; аз зерттелген мәселелерді мұқият зерделеу құнды ғылыми үлеске әкелуі мүмкін.",
|
| 958 |
-
"evidence_limited_completed": "Мақала ті
|
| 959 |
"node_error_detail": "Қате коды: {code} | {error} | Бақылау нүктесі сақталды; жұмысты жалғастыруға болады.",
|
| 960 |
"task_cancelled": "Тапсырма тоқтатылды. Бақылау нүктесі мен уақытша файлдар жойылды.",
|
| 961 |
"task_start_failed": "Мақала тапсырмасын бастау мүмкін болмады: {error}",
|
|
|
|
| 325 |
"literature_insufficient": "当前没有检索到可用于形成有效参考文献列表的直接相关文献。系统未使用无关文献凑数。请检查研究题目、关键词或补充核心文献后重试。",
|
| 326 |
"upstream_translation_stopped": "英文母稿未形成可交付的有效参考文献列表,因此后续翻译已停止;当前页面中已显示的译文不是完整论文。",
|
| 327 |
"evidence_limited_running": "文献证据覆盖提示:当前主题可能较前沿、较小众或具有较强跨学科特征,因此数据库中能够直接核验的高相关文献可能较少。这不会中断论文生成,也不代表研究价值不足。系统将继续完成论文,并坚持不使用无关或无法核验的文献凑数。建议后续结合领域核心文献进一步完善;对尚未被充分研究的问题保持探索,可能形成有价值的学术贡献。",
|
| 328 |
+
"evidence_limited_completed": "论文已完整生成,并保持了严格的文献相关性与可核验性要求。当前主题可能较前沿、较小众或具有较强跨学科特征,因此可直接核验的高相关文献数量相对有限;系统优先保证文献质量与研究聚焦,没有为了增加数量而加入无关或无法核验的来源。这也可能意味着该研究问题仍具有进一步拓展学术贡献的空间。正式投稿前,建议结合 EVIDENCE_COVERAGE_REPORT.txt 复核并适当补充领域核心文献,以进一步增强论文的理论基础。",
|
| 329 |
"node_error_detail": "错误代码:{code}|{error}|系统已保存断点,可继续恢复。",
|
| 330 |
"task_cancelled": "任务已取消,断点和临时文件已删除。",
|
| 331 |
"task_start_failed": "无法启动论文任务:{error}",
|
|
|
|
| 535 |
"literature_insufficient": "No directly relevant literature was retrieved that can support a valid final reference list. Unrelated sources were not used to fill a quota. Check the topic or keywords, or provide relevant core literature, and try again.",
|
| 536 |
"upstream_translation_stopped": "The English source manuscript could not form a deliverable validated reference list, so downstream translation stopped. Any translated text currently shown is incomplete and is not a final paper.",
|
| 537 |
"evidence_limited_running": "Literature-evidence coverage notice: this topic may be frontier, niche, or strongly interdisciplinary, so databases may contain relatively few high-relevance sources that can be directly validated. This will not interrupt manuscript generation and does not imply low research value. The system will continue the paper without padding it with irrelevant or unverifiable references. Consider adding core field literature later; careful exploration of under-studied questions may yield a valuable academic contribution.",
|
| 538 |
+
"evidence_limited_completed": "The paper has been generated in full with evidence-quality safeguards preserved. Because this topic may be frontier, niche, or interdisciplinary, directly validated high-relevance literature coverage may be relatively limited. SmartPaper therefore prioritized relevance and verifiability rather than adding unrelated or unverifiable references merely to increase the count. This may also indicate room for further scholarly contribution. Before formal submission, review EVIDENCE_COVERAGE_REPORT.txt and, where appropriate, strengthen the manuscript with additional core field literature.",
|
| 539 |
"node_error_detail": "Error code: {code} | {error} | A checkpoint has been saved and can be resumed.",
|
| 540 |
"task_cancelled": "The task was cancelled. Its checkpoint and temporary files were deleted.",
|
| 541 |
"task_start_failed": "The paper task could not be started: {error}",
|
|
|
|
| 745 |
"literature_insufficient": "Не удалось найти прямо релевантную литературу, достаточную для формирования валидного итогового списка источников. Система не использовала не��елевантные публикации ради количества. Проверьте тему и ключевые слова либо добавьте релевантные основные источники и повторите попытку.",
|
| 746 |
"upstream_translation_stopped": "Для английской исходной рукописи не удалось сформировать пригодный к выдаче валидный список источников, поэтому дальнейший перевод остановлен. Уже показанный перевод неполный и не является окончательной статьёй.",
|
| 747 |
"evidence_limited_running": "Уведомление о литературных доказательствах: тема может быть передовой, узкоспециализированной или междисциплинарной, поэтому в базах данных может быть немного высокорелевантных источников, которые удаётся напрямую подтвердить. Это не остановит создание статьи и не означает низкую научную ценность исследования. Система продолжит работу и не будет добавлять нерелевантные или непроверяемые источники ради количества. Позднее рекомендуется дополнить основную литературу по области; тщательное изучение недостаточно исследованных вопросов может дать ценный научный вклад.",
|
| 748 |
+
"evidence_limited_completed": "Статья полностью сформирована с сохранением строгих требований к релевантности и проверяемости источников. Тема может быть передовой, узкоспециализированной или междисциплинарной, поэтому число напрямую проверяемых источников с высокой релевантностью может быть относительно небольшим. SmartPaper отдаёт приоритет качеству и тематической точности, не добавляя нерелевантные или непроверяемые источники ради количества. Это также может указывать на пространство для дальнейшего научного вклада. Перед формальной подачей рекомендуется просмотреть EVIDENCE_COVERAGE_REPORT.txt и при необходимости усилить теоретическую основу дополнительной ключевой литературой по теме.",
|
| 749 |
"node_error_detail": "Код ошибки: {code} | {error} | Контрольная точка сохранена; работу можно продолжить.",
|
| 750 |
"task_cancelled": "Задача отменена. Контрольная точка и временные файлы удалены.",
|
| 751 |
"task_start_failed": "Не удалось запустить подготовку статьи: {error}",
|
|
|
|
| 955 |
"literature_insufficient": "Жарамды соңғы әдебиеттер тізімін құруға жеткілікті тікелей релевантты әдебиет табылмады. Жүйе санды толтыру үшін қатысы жоқ дереккөздерді пайдаланбады. Тақырып пен кілт сөздерді тексеріңіз немесе релевантты негізгі әдебиетті қосып, қайта көріңіз.",
|
| 956 |
"upstream_translation_stopped": "Ағылшын бастапқы қолжазбасы үшін жеткізуге жарамды тексерілген әдебиеттер тізімі қалыптаспады, сондықтан кейінгі аударма тоқтатылды. Қазір көрсетілген аударма толық емес және соңғы мақала болып саналмайды.",
|
| 957 |
"evidence_limited_running": "Әдеби дәлелдер туралы ескерту: тақырып өте жаңа, тар ауқымды немесе пәнаралық болуы мүмкін, сондықтан дерекқорларда тікелей тексеруге болатын жоғары релевантты еңбектер аз кездесуі ықтимал. Бұл мақала жасауды тоқтатпайды және зерттеудің ғылыми құндылығы төмен дегенді білдірмейді. Жүйе жұмысты жалғастырады және санды толтыру үшін қатысы жоқ немесе тексерілмейтін дереккөздерді қоспайды. Кейін саланың негізгі әдебиетін толықтырған жөн; аз зерттелген мәселелерді мұқият зерделеу құнды ғылыми үлеске әкелуі мүмкін.",
|
| 958 |
+
"evidence_limited_completed": "Мақала әдебиеттердің өзектілігі мен тексерілуіне қойылатын қатаң талаптар сақтала отырып толық жасалды. Тақырып жаңа, тар маманданған немесе пәнаралық болуы мүмкін, сондықтан тікелей тексерілетін әрі жоғары өзекті әдебиеттер саны салыстырмалы түрде аз болуы ықтимал. SmartPaper санды көбейту үшін қатысы жоқ немесе тексерілмейтін дереккөздерді қоспай, әдебиет сапасы мен зерттеу фокусына басымдық береді. Бұл зерттеу мәселесінде одан әрі ғылыми үлес қосуға мүмкіндік бар екенін де көрсетуі мүмкін. Ресми тапсыру алдында EVIDENCE_COVERAGE_REPORT.txt файлын қарап, қажет болса саланың негізгі әдебиеттерімен теориялық негізді күшейту ұсынылады.",
|
| 959 |
"node_error_detail": "Қате коды: {code} | {error} | Бақылау нүктесі сақталды; жұмысты жалғастыруға болады.",
|
| 960 |
"task_cancelled": "Тапсырма тоқтатылды. Бақылау нүктесі мен уақытша файлдар жойылды.",
|
| 961 |
"task_start_failed": "Мақала тапсырмасын бастау мүмкін болмады: {error}",
|