kairos-lang 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -188,7 +188,7 @@ baseAlign・再実行の外側フレーム再記録〕)。
188
188
 
189
189
  ## テスト
190
190
 
191
- (28 ファイル・641 本〔doctest 込み〕。下記の個別解説に加え、後発の
191
+ (29 ファイル・657 本〔doctest 込み〕。下記の個別解説に加え、後発の
192
192
  `test/empty-table.test.ts`〔ADR-45〕・`test/external.test.ts`〔ADR-46・35 本〕・
193
193
  `test/cycle-labels.test.ts`〔ADR-47〕・`test/split-parent.test.ts`〔ADR-48〕・
194
194
  `test/take.test.ts`/`test/takelast.test.ts`〔ADR-49/52〕・`test/hour-window.test.ts`〔ADR-50〕・
package/dist/eval.d.ts CHANGED
@@ -410,6 +410,8 @@ export declare class Evaluator {
410
410
  applyStage(stream: StreamV, stage: Stage, env: Env): StreamV;
411
411
  /** 糖衣右辺の変換適用: 基底 B(s => s |> …)とポイントフリー略記 A の両方(§4.8) */
412
412
  private applyTransform;
413
+ /** 前文メンバー roll:(spec §3.3=ロール規約の畳み込み・1.0.2 で実装): 規約の位置引数が無いときの既定 */
414
+ private rollMember;
413
415
  private axisMember;
414
416
  toStream(v: V, name?: string): StreamV;
415
417
  /** snapTo/within の対象窓の要素グリッド(ADR-36 判断 2 の「要素グリッド」)。
package/dist/eval.js CHANGED
@@ -524,6 +524,12 @@ export class Evaluator {
524
524
  absorb(st.block);
525
525
  if (st.expr) {
526
526
  base = this.rt.premises.get(st.expr.base) ?? this.err(`未定義の premise: ${st.expr.base}`);
527
+ // 1.0.2: 前文メンバー(calendar:/tz:/axis:/wkst:/roll:/source:/epoch:)は基底連鎖から継承し、ブロックの宣言が
528
+ // 上書きする(ADR-35 改訂 3=還流 2026-09-23 定期便 §3)。公開語の内側(evalDef の overlayMembers=判断 8)と
529
+ // 同じ集合を入口の本体層にも見せる——source: も同様(判断 5「nonWorking を上書きする派生は source: も上書き」は
530
+ // 宣言必須「寄り」で未執行=従来どおり)。
531
+ for (const [k, v] of this.overlayMembers(new Map(), base))
532
+ members.set(k, v);
527
533
  if (st.expr.withBlock)
528
534
  absorb(st.expr.withBlock);
529
535
  for (const stage of st.expr.stages) {
@@ -2667,7 +2673,7 @@ export class Evaluator {
2667
2673
  return this.filterByPredicate(stream, p => this.bool(this.applyValue(pred, [{ k: 'point', ms: p }], env)));
2668
2674
  }
2669
2675
  case 'roll': {
2670
- const conv = this.sym(this.evalExpr(positional[0] ?? this.err('roll は規約が必要(I3)'), env));
2676
+ const conv = this.sym(this.evalExpr(positional[0] ?? this.rollMember(env), env));
2671
2677
  const axisS = this.toStream(this.evalAxis(named('on') ?? this.axisMember(env, 'roll'), env));
2672
2678
  this.checkAlign(stream.align, axisS.align, 'roll(on:)');
2673
2679
  const axis = axisS.pts;
@@ -3067,6 +3073,13 @@ export class Evaluator {
3067
3073
  }
3068
3074
  this.err('糖衣の右辺を変換として適用できない(生成子を含む糖衣は生成子位置で使う)');
3069
3075
  }
3076
+ /** 前文メンバー roll:(spec §3.3=ロール規約の畳み込み・1.0.2 で実装): 規約の位置引数が無いときの既定 */
3077
+ rollMember(env) {
3078
+ const m = env.members.get('roll');
3079
+ if (!m)
3080
+ this.err('roll は規約が必要(I3)——位置引数で Following/Preceding を書くか前文で roll: を宣言');
3081
+ return typeof m === 'string' ? { t: 'name', name: m } : m;
3082
+ }
3070
3083
  axisMember(env, op) {
3071
3084
  const m = env.members.get('axis');
3072
3085
  if (!m)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kairos-lang",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Kairos schedule definition language — reference implementation (CLI + evaluator, zero runtime dependencies)",
5
5
  "keywords": [
6
6
  "schedule",