test(env): Phase 286A - Deprecated env warning regression test

Goal: Prevent regression where deprecated env vars warn even when unset

Changes:
- tools/smokes/v2/profiles/quick/env/phase286_deprecated_env_warnings.sh
  * Test Case 1: Unset env → No warnings (防止: 未設定で警告)
  * Test Case 2: NYASH_MACRO_TOPLEVEL_ALLOW=1 → Warning expected
  * Test Case 3: NYASH_MACRO_BOX_CHILD_RUNNER=1 → Warning expected
  * Uses env -u to truly unset variables (empty string counts as "set")

- docs/reference/environment-variables.md
  * Added "Deprecated 警告動作 (Phase 286A)" section
  * Clarified: warnings only appear when env var is explicitly set
  * Warning format: [macro][compat] <変数名> is deprecated; <推奨アクション>

Test Results:
 All 3 test cases pass
 Quick smoke: 45/46 tests pass (1 known failure unrelated)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-24 09:14:33 +09:00
parent 80f3403049
commit f9c21ea601
2 changed files with 203 additions and 0 deletions

View File

@ -362,4 +362,109 @@ env NYASH_FEATURES=stage3 NYASH_LLVM_USE_HARNESS=1 \
---
## Macro システム (Phase 286A 集約版)
**Phase 286A** で Macro 系環境変数を `src/config/env/macro_flags.rs` に集約しました。
### Core本線化対象
| 変数 | デフォルト | 適用経路 | 説明 |
| --- | --- | --- | --- |
| `NYASH_MACRO_PATHS=comma,separated,paths` | unset | Any | MacroBox パス(カンマ区切り)。推奨経路。 |
| `NYASH_MACRO_ENABLE={0\|1}` | `1` | Any | Macro システム全体の有効化。`0` で完全無効化lite プロファイル用)。 |
| `NYASH_MACRO_STRICT={0\|1\|true\|false}` | `true` | Any | Strict モード。エラー時に即失敗(未設定時は ON。 |
| `NYASH_MACRO_TRACE={0\|1}` | `0` | Any | Macro トレース出力。 |
| `NYASH_MACRO_BOX={0\|1}` | `0` | Any | MacroBox システムの有効化。 |
| `NYASH_MACRO_BOX_ENABLE=list` | unset | Any | 有効化する MacroBox 名(カンマ区切り)。 |
### Legacy / Backward compat
| 変数 | デフォルト | 適用経路 | 説明 |
| --- | --- | --- | --- |
| `NYASH_MACRO_BOX_NY={0\|1}` | `0` | Any | Legacy: Nyash MacroBox ロード有効化。非推奨:`NYASH_MACRO_PATHS` を使用してね。 |
| `NYASH_MACRO_BOX_NY_PATHS=comma,separated,paths` | unset | Any | Legacy: Nyash MacroBox パス(カンマ区切り)。非推奨:`NYASH_MACRO_PATHS` を使用してね。 |
| `NYASH_MACRO_TOPLEVEL_ALLOW={0\|1\|true\|false}` | `false` | Any | Legacy: トップレベル `static function MacroBoxSpec.expand(json)` を許可。非推奨BoxDeclaration を使用してね。 |
| `NYASH_MACRO_BOX_CHILD={0\|1\|true\|false}` | `true` | Any | 子プロセス MacroBox を使用。 |
| `NYASH_MACRO_BOX_CHILD_RUNNER={0\|1\|true\|false}` | `false` | Any | Legacy: Runner モードを強制。非推奨:自動管理されるから手動設定不要だよ。 |
| `NYASH_MACRO_BOX_NY_IDENTITY_ROUNDTRIP={0\|1}` | `0` | Any | Identity MacroBox の JSON ラウンドトリップ検証。 |
### Deprecated 警告動作 (Phase 286A)
**Phase 286A** で deprecated 環境変数の警告動作を明確化しました:
- **警告タイミング**: deprecated 変数が**明示的に設定されている場合のみ**警告を出力します。未設定時は警告なし。
- **警告フォーマット**: `[macro][compat] <変数名> is deprecated; <推奨アクション>`
- **対象変数**:
- `NYASH_MACRO_TOPLEVEL_ALLOW` - BoxDeclaration を使用推奨
- `NYASH_MACRO_BOX_CHILD_RUNNER` - 自動管理されるため設定不要
- `NYASH_MACRO_BOX_NY*` - `NYASH_MACRO_PATHS` を使用推奨
**例**:
```bash
# 未設定 - 警告なし
./target/release/hakorune program.hako
# 設定あり - 警告あり
NYASH_MACRO_TOPLEVEL_ALLOW=1 ./target/release/hakorune program.hako
# stderr: [macro][compat] NYASH_MACRO_TOPLEVEL_ALLOW is deprecated; ...
```
### CapabilitiesCapability ガード)
| 変数 | デフォルト | 適用経路 | 説明 |
| --- | --- | --- | --- |
| `NYASH_MACRO_CAP_IO={0\|1\|true\|false}` | `false` | Any | Macro から IO (File/Path/Dir) を許可。 |
| `NYASH_MACRO_CAP_NET={0\|1\|true\|false}` | `false` | Any | Macro から NET (HTTP/Socket) を許可。 |
| `NYASH_MACRO_CAP_ENV={0\|1\|true\|false}` | `false` | Any | Macro から環境変数読み取りを許可。 |
### Advanced / Dev-only
| 変数 | デフォルト | 適用経路 | 説明 |
| --- | --- | --- | --- |
| `NYASH_MACRO_MAX_PASSES=N` | unset | Any | Macro パス最大回数。 |
| `NYASH_MACRO_CYCLE_WINDOW=N` | unset | Any | Macro 検出ウィンドウ。 |
| `NYASH_MACRO_DERIVE_ALL={0\|1}` | `0` | Any | すべての MacroBox で派生マクロを有効化。 |
| `NYASH_MACRO_DERIVE=target` | unset | Any | 派生マクロのターゲット。 |
| `NYASH_MACRO_TRACE_JSONL=path` | unset | Any | Macro トレースを JSONL 形式で出力。 |
| `NYASH_MACRO_DISABLE={0\|1\|true\|false}` | `false` | Any | Macro システム全体の無効化(`NYASH_MACRO_ENABLE=0` と同等)。 |
| `NYASH_MACRO_BOX_EXAMPLE={0\|1}` | `0` | Any | Example MacroBox を有効化。 |
### Syntax Sugar
| 変数 | デフォルト | 適用経路 | 説明 |
| --- | --- | --- | --- |
| `NYASH_SYNTAX_SUGAR_LEVEL={none\|basic\|full}` | `none` | Any | 構文糖衣レベル。Macro スキャン中は一時的に `basic` に設定される。 |
### 使用例
```bash
# 基本使用(推奨)
NYASH_MACRO_PATHS=macros/my_macro.ny \
./target/release/hakorune --backend vm program.hako
# Strict モード
NYASH_MACRO_STRICT=1 \
./target/release/hakorune --backend vm program.hako
# Trace 出力
NYASH_MACRO_TRACE=1 \
./target/release/hakorune --backend vm program.hako
# MacroBox 有効化
NYASH_MACRO_BOX=1 NYASH_MACRO_BOX_ENABLE=MyMacroBox,AnotherBox \
./target/release/hakorune --backend vm program.hako
# Capability ガード
NYASH_MACRO_CAP_IO=1 NYASH_MACRO_CAP_NET=0 \
./target/release/hakorune --backend vm program.hako
# Legacy非推奨
NYASH_MACRO_BOX_NY=1 NYASH_MACRO_BOX_NY_PATHS=legacy_macros.ny \
./target/release/hakorune --backend vm program.hako
```
参考: [docs/guides/macro-profiles.md](../guides/macro-profiles.md) / [docs/guides/macro-box.md](../guides/macro-box.md) / [docs/guides/macro-box-nyash.md](../guides/macro-box-nyash.md)
---
参考: [docs/development/architecture/mir-logs-observability.md](../development/architecture/mir-logs-observability.md) / [src/mir/verification/](../../src/mir/verification/)