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:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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."
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user