feat: 리밸런싱 엔진 V1 + GAS 버그 수정 (2026-06-13)

주요 변경:
- tools/build_rebalance_engine_v1.py: REBALANCE_ENGINE_V1 신규
  * account_snapshot 직접 합산(_build_snap_position_map) → 소수주 분리 행 병합
  * 레짐 소스 macro.REGIME_PRELIM 최우선 (GAS 와 동일)
- src/gas_adapter_parts/gdf_06_rebalance.gs: runRebalanceSheet_() 신규
  * Logger.log / getSpreadsheet_() 로 run_all 연동 수정
- src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs
  * _mergePositionRecord_(): 소수주 중복 행 합산 신규
  * parseInt → parseFloat (qty, availQty)
- src/gas_adapter_parts/gdf_01_price_metrics.gs
  * 미보유 종목 SELL_READY → WATCH_EXIT_SIGNAL
- spec/41_release_dag.yaml: build_rebalance_sheet 노드 추가 (step_count 63)
- spec/51_formula_lifecycle_registry.yaml: REBALANCE_ENGINE_V1 등록

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-13 13:20:14 +09:00
commit ee3e799de1
1474 changed files with 176087 additions and 0 deletions
@@ -0,0 +1,18 @@
# ADR-0001 Single Source of Truth
## Context
The engine has multiple JSON versions for the same concept, which creates stale reads and conflicting runtime authority.
## Decision
Use `canonical_manifest.yaml` and the canonical artifact resolver as the runtime authority for each concept.
## Consequence
Runtime readers must use one canonical path per concept. Deprecated files remain archived only.
## Rollback
If a canonical artifact is invalid, rebuild the canonical copy rather than falling back to a deprecated runtime source.
+18
View File
@@ -0,0 +1,18 @@
# ADR-0002 GAS Thin Adapter
## Context
GAS has accumulated business logic that belongs in Python validation and builders.
## Decision
Constrain GAS to collection, normalization, export, and display responsibilities.
## Consequence
Decision, sizing, stop-loss, take-profit, and risk calculations must live in deterministic Python builders.
## Rollback
If a GAS function becomes a business-logic dependency, move the logic into Python and keep only a thin adapter in GAS.
@@ -0,0 +1,18 @@
# ADR-0003 No LLM Numeric Generation
## Context
LLM-generated prices, quantities, and thresholds caused authority collisions and provenance loss.
## Decision
LLM outputs must be copy-only. All numeric values must come from harness or canonical artifacts.
## Consequence
Prompt and report contracts must render numbers only when a source artifact already provides them.
## Rollback
There is no rollback path that reintroduces free-form numeric generation. That would violate the operating contract.
+18
View File
@@ -0,0 +1,18 @@
# ADR-0004 Shadow Before Active
## Context
Replay and shadow artifacts often look complete before live T+20 sample quality is sufficient.
## Decision
Shadow or advisory formulas may be rendered, but only active formulas may drive live execution.
## Consequence
Live sample thresholds remain mandatory before promotion.
## Rollback
If active promotion is found without live qualification, demote the artifact and restore shadow-only status.
+35
View File
@@ -0,0 +1,35 @@
meta:
source: AGENTS.md
version: 1
purpose: Extract top-level rules into canonical spec targets without changing AGENTS.md.
principles:
- rule_key: no_llm_numeric_generation
target_spec_path: spec/00_execution_contract.yaml
- rule_key: single_formula_registry_source
target_spec_path: spec/13_formula_registry.yaml
- rule_key: runtime_temp_direct_read_block
target_spec_path: spec/32_canonical_artifact_resolver.yaml
- rule_key: replay_live_separation
target_spec_path: spec/37_evaluation_dashboard_contract.yaml
- rule_key: live_t20_promotion_lock
target_spec_path: spec/35_rule_lifecycle_governance_v3.yaml
- rule_key: validation_failure_no_bypass
target_spec_path: spec/21_harness_governance_contract.yaml
- rule_key: data_missing_only
target_spec_path: spec/07_output_schema.yaml
- rule_key: gas_thin_adapter
target_spec_path: spec/34_architecture_boundaries.yaml
- rule_key: prompt_numeric_freeze
target_spec_path: spec/31_low_capability_llm_response_contract.yaml
- rule_key: single_execution_authority
target_spec_path: spec/33_execution_precedence_lock.yaml
- rule_key: hts_order_executable_only_after_gate
target_spec_path: spec/19_harness_contract.yaml
- rule_key: no_intraday_aggressive_buy_before_close
target_spec_path: spec/06_exit_policy.yaml
mapping_policy:
- "The original AGENTS.md is not edited by this proposal."
- "Each extracted rule must have a target_spec_path."
- "The principles list is intentionally capped at 12."
+13
View File
@@ -0,0 +1,13 @@
# Doctrine
This repository is a deterministic quant engine.
## Operating Rules
- Numbers are copied from canonical artifacts, not invented in the renderer.
- `Temp/` is a build/output layer, not a runtime authority.
- Replay metrics are informational unless explicitly labeled live and sample-qualified.
- Live T+20 sample counts below 30 cannot unlock `active` or `PASS_100`.
- GAS is an adapter layer, not a business-logic layer.
- Prompts are copy-only renderers and must not compute prices, quantities, or thresholds.
+23
View File
@@ -0,0 +1,23 @@
# AGENTS Constitution Proposal
This proposal extracts the top-level operating principles from `AGENTS.md` without changing the original file.
## Principles
1. No price, quantity, stop, take-profit, or score may be invented by the LLM.
2. Only registered formula IDs in `spec/13_formula_registry.yaml` may be cited.
3. `Temp/` files may not be used as runtime source unless explicitly designated as build output.
4. Canonical artifacts must be read through `canonical_manifest.yaml`.
5. Replay performance must never be presented as live performance.
6. Live T+20 sample counts below 30 may not be promoted to `active` or `PASS_100`.
7. Validation failures may not be bypassed with narrative explanations.
8. Missing files or missing provenance must be rendered as `DATA_MISSING`.
9. GAS may not gain new investment decision logic.
10. Prompts may not request the LLM to calculate prices, quantities, thresholds, or scores.
11. Failed harness states may not be rendered as executable order tables.
12. Final decision authority must come from a single canonical execution packet.
## Notes
- This document is a proposal only.
- The original `AGENTS.md` remains unchanged.
+8
View File
@@ -0,0 +1,8 @@
# Runbook
1. Build or refresh the JSON harness with `npm run prepare-json`.
2. Run strict validation gates before packaging.
3. Generate canonical artifacts through the builder scripts only.
4. Render reports from canonical data only.
5. Package upload artifacts only after the full gate passes or the output is explicitly audit-only.