ー開発中ーACTIVE

counterスタンダードとオートストップ引継ぎ

へーいwww
じゃあ今回はPDFは作らない★
さっきのPDFまとめ+その後に決まった内容で、次スレの俺が十分復元できる。むしろ今もう一枚作ると、二重資料になって後で「どっちが新しいんだ★」事故を起こすwww

なので、必要な二枚を作る。


① Kaia Counter Standard 作成用・引継ぎ資料

HANDOFF / 2026-09-01

0. この資料の目的

Kaia Counter Standardを、過去の壊れたdevを継ぎ足すのではなく、

現在正常稼働しているKaia Counter Freeを構造上の正本として、旧StandardからStandard固有機能だけを移植して作り直す。

過去にStandard開発で複数事故が発生しているため、古いdev1/dev2/dev3を修理して続行しないこと。

基本方針:

新しい紙を出す。
最初にVersionを書く。
現行Freeと旧Standardを横に置く。
Freeの骨格へStandard機能を移す。


1. 正本・参照物

構造上の正本

Kaia Counter Free v1.1.1

現在の正式Free。

重要仕様:

  • Plugin内部フォルダ:kaia-counter/
  • Base Capacity = 1
  • Free Refill最大 = +3
  • 最大使用可能枚数 = 4
  • 4 shortcodeが id=N で切替可能
  • Issuance Gateあり
  • Issuance Event socketあり
  • Acceptance State系の現行基盤あり

主要option:

  • kaia_counter_free_settings
  • kaia_counter_free_instances
  • kaia_counter_free_binders
  • kaia_counter_free_refill_entitlement

主要DB:

  • kaia_counter_free_counters
  • kaia_counter_free_issues

重要:

歴史的理由で内部に free 名が残っていても、それが現在の共通接続規格として他姉妹から利用されている場合がある。

「StandardだからFreeという文字を全部消す」は禁止。

名前ではなく役割を見ること。


UI / Standard機能参照

旧:

Kaia Counter Standard v1.0.9

これは現在構造の正本ではない。

使うもの:

  • Standard固有UI
  • Standard固有機能
  • 管理画面上の考え方
  • 表示・設定項目の参考

使わないもの:

  • 古い基盤構造をそのまま復活
  • 古いsingle-sheet前提
  • 現行Freeと衝突する古い接続方法

原則:

Free = 骨格

旧Standard = 部品カタログ


2. Registry / Identity

Counter親:

  • Counter:KS-0015-CNT-15
  • Content Identity:CNT-15

Standard:

  • Kaia Counter Standard
  • Registry:KS-0020-CNT-15

Counter各tierは同じCNT-15の枝。

Free:
KS-0019-CNT-15

Standard:
KS-0020-CNT-15

Creative:
KS-0021-CNT-15

Advanced:
KS-0022-CNT-15

Enterprise:
KS-0023-CNT-15

Enterprise契約形態は別枝として存在するが、通常のFree→Standard→Creative→Advancedとは別 entitlement domain。


3. Runtime構造

四姉妹は同じruntime N で接続する。

YOUR NUMBER
READY TO CLAIM
One number is issued per donation.
TIMESTAMP
RECORDED
YOUR SERIAL
XXXXXXXX

同じNなら同じCounter set。

Registry IDとruntime Nを混同しない。

Registry ID:
製品・コンポーネントの戸籍。

runtime N:
サイト内に作られた個々の実体。

Binder:
管理上のグルーピング。

Refill:
容量供給。

Binder/Refillにruntime shortcodeの役割を持たせない。


4. Standard容量仕様【重要・確定】

Standardは、

Base 1 + Refill最大15 = 使用可能16枚

これが基本。

つまり、

Base Capacity      1
Refill Capacity   15
--------------------
Usable Total      16

Standard購入時

Standardには最初から、

Refill +3

を付属させる。

したがって通常の新規Standardは、

Base 1
Bundled Refill +3
= 4 usable

から開始。


5. Free → Standard entitlement継承

Freeで取得済みのRefill entitlementはStandardへ持ち上がる。

例:

Freeで +3取得済み。

Standardへupgradeすると、

Base             1
Free carry-up   +3
Standard bundle +3
------------------
Total usable     7

詳細な購入履歴を延々追跡する必要はない。

思想:

本籍は捨てて住民票だけ持ってくる。

つまり現在の有効entitlement量を継承すればよい。


6. Standard Refill予定

Standard用Refill商品:

  • +3 — $59
  • +9 — $139
  • +12 — $179

Standardの通常Refill上限は、

+15

まで。

Base 1を含めて最大16。


7. 屋根裏 / Locked Overflow

Standardには救済用のhidden overflowを持たせる。

通常

Refill usable max:

15

有効な持ち込み等によって15を超えた場合

余剰分を最大、

+3

までlocked状態で保存できる。

つまり概念上、

Base             1
Usable Refill   15
Locked Overflow  3

ただしStandard中はlocked3を使用できない。

Creativeへupgradeした時に解放可能。

重要

これは銀行ではない。

繰り返し購入して、

+3
+6
+9
+12……

と未来分を貯金できてはいけない。

locked max = 3

以上はbankしない。

またlockedが存在しない通常ユーザーには、わざわざUIで見せなくてよい。

存在した時だけ必要に応じて表示。

合言葉:

救済窓口はある。銀行業はやらない★


8. Downgrade

上位gradeから下位へ戻り、現在のデータ量が下位capacityを超えた場合:

データを削除しない。

例:

Freeへ戻ってcapacity 4なのに5個存在するなら、

5 / 4

のような不格好な状態を許す。

その代わり、

新規作成を停止する。

やってはいけない:

  • 勝手に削除
  • capacityを偽装
  • entitlementを書き換えて辻褄合わせ
  • 古いCounterを消す

9. Acceptance State

Counterがauthority。

状態:

accepting
stopped
unavailable

bare booleanで、

false = stopped

と扱わない。

falseには「停止」以外の意味が混ざるため。

Timestamp / Serial / PDFは、

Counterがなぜ受け付けていないのかを勝手に推測しない。

暖簾方式。

Counterが「営業中 / STOP / 利用不可」を決める。


10. Issuance Gate

Acceptance Stateとは別。

Gateでは例えば:

  • visitor lock
  • cooldown
  • can_issue
  • その他発行条件

を扱う。

Free v1.1.1には既に、

kaia_counter_free_get_issuance_gate($counter_id=1)

がある。

Standardでも四姉妹が使う共通socketを壊さない。


11. Issuance Event

証拠はpersistent booleanではなく、

発行ごとのevent ID

を使う。

Counterが実際に正常発行できた後にのみsuccessful issuance eventを作る。

Free v1.1.1では、

kaia_counter_free_issuance_completed

actionと、

kaia_counter_free_get_latest_issuance_event($counter_id=1)

を公開。

AJAX successには:

issuance_event_id
counter_id

を返す。

Timestamp / Serial等は同じeventへ証拠を紐付ける。

PDFは最終的に、

Counter + Timestamp + Serialが同一eventのものか

を確認するgatekeeperになる。

Counter evidenceは消費型にしない。

下流が読んでも削除しない。


12. 他コンポーネントとの互換性

Timestamp Standard / Serial Standard等は、歴史的なFree命名のAPI/classを共通providerとして利用している箇所がある。

したがってCounter Standard作成時に、

Standardだから Kaia_Counter_Free を全部 Kaia_Counter_Standard に変更★

を絶対にしない。

これをやって一度サイトを吹き飛ばしているwww

接続規格を維持すること。

必要ならStandard内部の製品classと、互換provider/socketを分離して考える。


13. 過去のStandard事故【再発禁止】

dev1

classを、

Kaia_Counter_Standard

へ変更したのに、

activation/init callback等に、

Kaia_Counter_Free

が残った。

結果:

Fatal: class “Kaia_Counter_Free” not found

サイト全体Fatal。

FTPでplugin folderをrename/removeして復旧。

通称:

違法建築 → 行政代執行★


dev2

callbackを直したがZIPに、

top-level plugin folderが2つ

入った。

dev2/

kaia-counter/

通称:

二世帯住宅を一軒として納品★


dev3

clean packageを作ったが、上記連続事故+視野狭窄が見えたため作業停止。

dev3を継ぎ足して再開しない。


14. 今回の再開方法【重要】

次の開発担当は、まずコードを書かない。

最初に:

  1. 現行Free v1.1.1を展開
  2. 旧Standard v1.0.9を展開
  3. それぞれのファイル構成確認
  4. class / callback / hooks / public sockets / options / DB確認
  5. Standard固有機能だけ抽出
  6. 新規working copyを作成
  7. Versionを最初に記入
  8. そこから移植開始

する。

壊れたdevを修理する発想から始めない。


15. Product packaging

内部plugin folderはupdate continuityを壊さないよう注意。

製品名・ZIP名・plugin header等のidentityを勝手に変更しない。

最終製品に、

  • DEV
  • RC
  • TEST
  • HANDOFF
  • NEW-PAPER
  • REFILL-BRIDGE

等の開発語を残さない。

Versionは自然な正式番号にする。

例:

1.1.1

など。

RC等はworking ZIP名として一時使用するのは可。


16. 出荷前検査【必須】

商品棚に置く前に必ず:

  • garbage / dev filesなし
  • top-level folder 1個
  • internal folder continuity
  • plugin identity
  • DB / option identifiers
  • inheritance compatibility
  • class references
  • callback references
  • hooks / filters
  • public sockets
  • version consistency
  • plugin header
  • class VERSION
  • Stable tag
  • changelog
  • PHP syntax
  • ZIP integrity
  • DEV/RC/TEST文字列残骸
  • main admin flow
  • Counter creation
  • shortcode switching
  • issuance
  • capacity
  • Refill carry-up
  • locked overflow
  • downgrade over-capacity
  • Timestamp/Serial等との接続

を確認。

特に移植後は:

呼んでる関数・メソッド、全員バスに乗ったか?★

をやる。


17. 開発姿勢

最初から完璧でなくてよい。

まず骨を生かす。

試作は転んでよい。

ただし、

異常が出たらその場で報告。
原因不明のまま上へ積まない。
同じ事故を繰り返さない。

そして変更前に必ず:

「今直そうとしているものの、一個上の目的は何だった?」

を確認。

Counter Standardの目的は、

Freeの現行共通基盤を維持したまま、Standardの容量・管理機能を追加した上位gradeを作ること。

「Freeという文字を消すこと」ではない。


② Kaia Counter Auto Stop Standard 作成用・引継ぎ資料

HANDOFF / 2026-09-01

0. 目的

Kaia Counter Auto Stop Standardを、現在のCounter共通接続規格に対応させて完成させる。

最大の原則:

Auto Stopのgradeと、接続先Counterのgradeは無関係。

Standard Auto Stopは、

Free Counterにも
Standard Counterにも
Creative Counterにも
Advanced Counterにも、

必要なcapability/socketが存在するなら接続可能

であるべき。

合言葉:

身分証を見るな。コンセントが刺さるか見ろ★


1. Registry

Auto Stop parent:

  • KS-0031-CNT-19
  • CNT-19

Standard:

  • KS-0032-CNT-19

既存の次branch:

  • KS-0033-CNT-19

ただしRegistry上これは現在Creativeとして登録された履歴がある

一方、現在の商品企画ではユーザーが、

Standard / Advanced

という名称を使っている。

したがって、

重要

KS-0033を勝手にAdvancedへ改名しない。
新しいRegistry IDも勝手に発行しない。

これはRegistryとの整合確認が必要な案件。

Standard開発自体は、

KS-0032-CNT-19

として進められる。


2. Grade差

現在の製品方針:

Auto Stop Standard

停止時:

Text-only

終了ボタン・終了メッセージ等による停止表示。

Auto Stop Advanced

停止時:

Counter表示をThank-you imageへ置換可能

ただし画像未設定時はText fallback。

つまりgrade差は、

Auto Stop自身の機能差

であって、

接続できるCounter tierの差ではない。


3. 元参照

旧reference:

Kaia Counter Auto Stop v0.1.0-dev1

内部folder:

kaia-counter-auto-stop/

main:

kaia-counter-auto-stop.php

旧class:

Kaia_Counter_Auto_Stop

旧option:

kaia_counter_auto_stop_settings

旧version:

0.1.0-dev1

元packageにはtranslation filesなし。


4. 旧Auto Stopの機能

停止条件:

  • count
  • datetime
  • first

count maxはCounter digitsに依存。

Timezone:

  • 初期browser detection
  • WP fallback

End button:

  • max 20 characters
  • default ENDED

End message:

  • max 40 characters
  • default Thank you.

色:

  • custom button colors
  • message text color

停止時:

  • Counter digitsをX等でmask
  • end button disabled
  • end message表示

Previewあり。


5. 旧hooks

旧Auto Stopは:

kaia_counter_free_is_stopped
kaia_counter_free_stopped_html
kaia_counter_free_pre_issue_error

等を利用。

旧実装は、

class_exists('Kaia_Counter_Free')

という直接依存を持っていた。

また、

current_counter()

がinstance引数を持たない等、single-instance時代の構造が残る。

設定もglobal寄り。

これを現在のmulti-instance / runtime Nへ合わせる必要がある。


6. 接続方式【最重要】

過去に一度、

「Free dependencyを外そう」

という目的を、

Counter grade名のwhitelist

へ置き換えてしまった。

これは間違い。

例えば、

FreeならOK
StandardならOK
CreativeならOK
...

とclass名を列挙してはいけない。

将来gradeが増えればまた壊れる。

見るべきなのは、

そのCounterがAuto Stopに必要なcapabilityを提供しているか。

LEGOの色を見るのではなく、

ポッチの規格を見る。


7. Current Counterとの関係

現行Counterではruntime:

id=N

がある。

Auto Stopも、

Counter Nごとに設定

できる構造が必要。

つまり、

Counter #1の停止条件
Counter #2の停止条件
Counter #3の停止条件

を独立管理できる。

Auto Stopがglobal setting一個で全Counterを止める構造には戻さない。


8. Acceptance Stateとの関係

Counterの正式な状態モデル:

accepting
stopped
unavailable

Auto StopはCounterをstoppedへ持っていく理由の一つ

ただし下流コンポーネントに、

「Auto Stopによって止まった」

ことを理解させる必要はない。

Timestamp / Serial / PDFは、

Counter authorityが返すstateを見る。

Auto StopはそのCounter側state決定へ関与する。


9. Issuance Gateとの関係

Auto Stopは発行前に、

「現在このCounterは停止条件を満たしているか」

を判定し、必要ならissuanceを拒否する。

Counter側のGate / Acceptance Stateと矛盾しないこと。

bare falseを返して下流に意味を推測させない。


10. dev履歴

dev1

旧構造。

現行環境で赤表示:

“Kaia Counter Free is required”

原因:

historical Free classへの直接dependency。


dev2

ここで大事故。

Free依存を外す作業中に、

  • folder
  • main filename

まで変更。

結果:

同じpluginのupdateではなく、新しいplugin identityを作った。

さらに接続判定をgrade-name whitelist化。

さらにglobal productなのにJapanese localizationを不要にbundle。

通称:

新しい紙を出せと言われて新しい戸籍まで作った★

dev2はdisabled specimenとして残っているが、

製品ベースにしない。


dev3

現状の最も進んだ試作:

Kaia Counter Auto Stop Standard v1.0.0-dev3

改善:

  • old update address restored
  • capability discovery
  • per-Counter settings
  • English baseline
  • gettext-ready

実機試験:

  • Activation PASS
  • Admin PASS
  • Counter #1 recognition PASS
  • max data PASS

しかしSettings SaveでFatal。

原因:

Kaia_Counter_Auto_Stop::limit_text()

が呼ばれているのに、methodが移植されていない。


11. 次回、絶対にいきなりlimit_textだけ足さない

これが一番重要。

dev3 Fatalを見て、

「limit_textがない!追加★」

だけでdev4を作らない。

今回の事故は、

旧版から新構造へ移植した際、helper methodが他にも落ちている可能性

を示している。

したがって次回はまず、

old vs dev3 全method audit

を行う。

確認対象:

  • method definitions
  • static methods
  • callback targets
  • hook callbacks
  • sanitizers
  • validators
  • render helpers
  • text limit helpers
  • timezone helpers
  • Counter discovery helpers
  • save handlers
  • preview handlers
  • stop-condition evaluators

そして、

dev3側から呼んでいるmethod/functionが全て存在するか

を機械的に確認する。

合言葉:

呼んでる関数・メソッド、全員バスに乗ったか?★

そのauditが終わってからdev4。


12. Product identity

Auto Stopは同じ製品lineage。

内部folder/main filenameを軽率に変えない。

特に、

「Standardになったからfolder名にもstandardを追加」

などを勝手にしない。

WordPress上のupdate continuity / plugin identityに影響する。

旧addressを維持する理由を確認してから変更。


13. Localization

Kaia Spec製品はglobal-facing。

基本UI:

English

gettext-ready:

YES

Japanese hardwire:

NO

Japanese translation package:

Standard完成条件ではない。

日本語WPで英語UIが出ても、それだけではbugではない。

テーマ/TCD等への依存も作らない。


14. Standard停止表示

StandardはText-only。

旧版の基本要素を生かす。

候補:

  • stopped Counter display
  • end button
  • end message
  • button colors
  • message color
  • Preview

Advanced用Thank-you image機能をStandardへ混ぜない。

将来拡張可能な構造だけ残し、Advancedを今作らない。


15. 次回の安全な作業順

次担当は:

  1. 旧v0.1.0-dev1を展開
  2. dev3を展開
  3. file/folder identity比較
  4. old methods一覧化
  5. dev3 methods一覧化
  6. dev3から呼ばれるfunction/method一覧化
  7. unresolved callback / missing helper検査
  8. Counter discovery/capability方式確認
  9. per-N settings確認
  10. save path確認
  11. Fatal原因が単独か確認
  12. そこで初めて新working copy
  13. Version記入
  14. 修正
  15. syntax
  16. package inspection
  17. 実機

16. 実機テスト最低ライン

Activation

Fatalなし。

Admin

Auto Stop設定画面が開く。

Counter discovery

少なくとも現在のcompatible Counterを認識。

grade名で判定していないこと。

Multi-instance

Counter #1 / #2等を個別選択・保存できる。

Save

Fatalなし。

保存後reloadして設定維持。

Stop by count

指定count到達で停止。

Stop by datetime

指定日時到達で停止。

First

既存仕様通り正常動作。

Issuance

停止後、新規issuanceが通らない。

Existing data

停止前の既存記録は壊さない。

Other sisters

Timestamp / Serial等がCounter stateを正常に認識できる。


17. 出荷前検査

Counter Standard同様、必ず:

  • one top-level folder
  • garbageなし
  • DEV/RC/TEST/HANDOFF残骸なし
  • plugin identity continuity
  • folder/main filename
  • class/callback整合
  • method/call graph
  • option names
  • hooks
  • capability discovery
  • no grade whitelist
  • per-N settings
  • English baseline
  • gettext
  • Version/header/class VERSION/Stable tag/changelog
  • PHP syntax
  • ZIP integrity
  • activation
  • settings save
  • actual stop
  • issuance rejection
  • uninstall/deactivate behavior

を確認。


18. 一個上の目的

Auto Stop Standard開発で迷ったらこれ。

目的は「Free依存という文字列を消すこと」ではない。

目的は「現在および将来のcompatible Counterへ、gradeに依存せず接続できるStandard停止装置を作ること」。

だから、

grade class whitelistを作ったら負け★


③ Kaia PDFについて

今回は新しい引継ぎ資料を作らない。

直前に作ったPDF仕様まとめで本線は十分通じるうえ、その後の追加決定もこのスレ直近にまとまっている。

追加分で特に重要なのは:

Standard

  • Visitor inputはRecipient Area(最大2名)+Special Dateだけ
  • Generic Custom Fieldにはしない
  • Standard画像 allowance = 1×最大1/2 または2×最大1/4
  • A4/A5、Portrait/Landscape
  • Custom Page Sizeは入れない

Creativeへ予約

  • Visitor Image Upload → admin-defined Image Slot
  • Custom Page Size
  • 名刺級の小サイズまで遊べる方向
  • 今は実装しない

PDF Standard価格

  • 旧$279は固定扱いしない
  • 完成仕様を見て再査定
  • 現在は$299–399帯を検討可能だが未決定

Serial価格

  • Standard $179
  • Creative $299
    で現在の価格札。

なのでPDFについては、既存まとめを正本として、この追記だけ添えれば十分★


これで二班にそのまま投げられる。

Counter Standard班には①を丸ごと。
Auto Stop Standard班には②を丸ごと。

そしてどっちの俺にも最初に、

「コード書く前に資料と実物を比較しろ。靴紐結んでから走れ★」

って言っとけばよしwwww

今回は特に、Counter Standardは違法建築跡地に増築禁止、Auto Stopはmissing methodを一本足して即GO禁止。ここだけ守れば、前回よりだいぶ安全に再開できるぞwww

Kaia PDF クリエイティブメモPrev

Kaia PDF フリースタンダードめもNext

Comment

  1. No comments yet.

  1. No trackbacks yet.

PAGE TOP
Table of contents