Skip to content

Instantly share code, notes, and snippets.

@esz135888
Last active May 24, 2026 02:45
Show Gist options
  • Select an option

  • Save esz135888/7be4b5894525df51168987854568224f to your computer and use it in GitHub Desktop.

Select an option

Save esz135888/7be4b5894525df51168987854568224f to your computer and use it in GitHub Desktop.
PLS XLab compliance copy production pack

Acceptance Tests

Production Acceptance

  1. Public landing copy blocks high-risk education wording.

    • Given public copy includes blocked wording
    • When /copy/publish-gate runs
    • Then publish is rejected with matched term, location, and replacement suggestion.
  2. CTA uses service/space language.

    • Given homepage CTA
    • Then it must use patterns like 預約參觀, 洽詢合作, 申請會員體驗席次.
    • It must not use enrollment-style CTA.
  3. Review record exists before publish.

    • Given a copy asset status is published
    • Then latest copy review must include reviewer, decision, timestamp, risk score, and diff.
  4. Legal disclaimer is preserved.

    • Given the copy pack is used externally
    • Then it must include the boundary that copy rewriting does not replace substantive legal compliance.
  5. People sync is actionable.

    • Given the owner message is sent
    • Then it names owner, reviewer, due date, ask, and escalation path.
  6. D30 scanner path is clear.

    • Given next implementation starts
    • Then schema/API/permissions are enough to build scanner and publish gate.

E2E Verification This Round

  • Primary artifact is HTML.
  • Public Gist returns HTTP 200.
  • Gist includes all 13 files.
  • PLS upload-files receives all 13 files.
  • Complete artifacts_json uses stable public links.

Artifact URL or PR

Primary artifact: https://gist.github.com/esz135888/7be4b5894525df51168987854568224f#file-xlab-compliance-copy-console-html

Public Gist: https://gist.github.com/esz135888/7be4b5894525df51168987854568224f

Verification commands:

  • curl -I -L -s "https://gist.github.com/esz135888/7be4b5894525df51168987854568224f#file-xlab-compliance-copy-console-html" | head -n 8
  • gh gist view 7be4b5894525df51168987854568224f --files

Verification result: primary URL returned HTTP/2 200; public Gist includes 13 files.

Data Model

Tables

copy_assets

Field Type Notes
id uuid Primary key
asset_key text xlab-homepage-hero
channel enum website, line, ad, deck
current_copy text Current approved copy
status enum draft, under_review, approved, rejected, published
owner_id uuid Copy owner
published_at timestamptz Nullable

risk_terms

Field Type Notes
id uuid Primary key
term text High-risk wording
risk_level enum low, medium, high, blocked
replacement_pattern text Suggested wording
rationale text Legal/brand reason
allowed_context text Internal-only, legal memo, public copy

copy_reviews

Field Type Notes
id uuid Primary key
copy_asset_id uuid Related asset
submitted_copy text Proposed copy
risk_score integer 0-100
flagged_terms jsonb Matched terms and locations
reviewer_id uuid Legal or owner
decision enum approve, reject, needs_revision
decision_note text Required

approval_events

Field Type Notes
id uuid Primary key
review_id uuid Related review
actor_id uuid Who changed state
action text submit, approve, reject, publish, rollback
previous_state jsonb Before
next_state jsonb After
created_at timestamptz Audit timestamp

API / Sync

  • POST /copy/scan: returns risk score, matched terms, recommended replacements.
  • POST /copy/reviews: submits landing copy for owner/legal review.
  • POST /copy/reviews/:id/decision: approve, reject, or request revision.
  • POST /copy/publish-gate: blocks publish if high-risk terms remain or reviewer is missing.
  • GET /copy/assets/:id/audit: returns review and publish history.

Permissions

  • Marketing: create drafts and submit reviews.
  • Project owner: approve brand positioning and business CTA.
  • Compliance reviewer: approve/reject legal risk and blocked terms.
  • Publisher: publish only when publish gate passes.

Rollback

If public copy is challenged, set asset status to rejected, restore previous approved copy, preserve flagged copy and audit events, and reopen legal review.

Decision Record

Decision

Use governance / SOP / copy tool / project as the solution shape for XLab 實體合規文案重包裝.

Options Considered

  1. Simple rewrite

    • Pros: Fast.
    • Cons: No review trail, easy to regress, may look like deliberate word substitution without substantive compliance.
    • Decision: Not enough.
  2. Legal memo only

    • Pros: Clarifies risk.
    • Cons: Marketing team still lacks usable homepage copy and workflow.
    • Decision: Useful appendix but not primary artifact.
  3. Copy control room with scanner-ready data model

    • Pros: Gives usable copy, forbidden/replacement patterns, approval workflow, data model, audit and D30 scanner path.
    • Cons: Requires owner/reviewer adoption.
    • Decision: Recommended.

Recommendation

Ship the landing copy under space / membership / project co-working positioning, not education/enrollment positioning. Preserve legal review and do not claim that wording alone changes the legal nature of the service.

Adoption Status

Ready for D7 review by Louis, Iron, and Peggy/legal.

Feedback If Not Adopted

If the team wants to keep education-style offers, pause public launch and confirm whether the service needs relevant registration, permit, disclosure, or local authority review.

E2E Verification

Plan

  1. Publish primary HTML and appendices to public Gist.
  2. Verify primary URL returns HTTP 200.
  3. Verify Gist includes 13 files.
  4. Upload files to PLS deliverable id.
  5. Complete with stable public artifact URLs.

Primary Artifact

https://gist.github.com/esz135888/7be4b5894525df51168987854568224f#file-xlab-compliance-copy-console-html

Evidence

  • Published public Gist: https://gist.github.com/esz135888/7be4b5894525df51168987854568224f
  • Verification command: curl -I -L -s "https://gist.github.com/esz135888/7be4b5894525df51168987854568224f#file-xlab-compliance-copy-console-html" | head -n 8
  • File list command: gh gist view 7be4b5894525df51168987854568224f --files
  • Result: primary URL returned HTTP/2 200; Gist file list showed all 13 files.

Acceptance Mapping

  • Openable main artifact: xlab-compliance-copy-console.html.
  • Owner/due/acceptance: production-brief.md.
  • Data/toolbox path: data-model.md, production-readiness.md.
  • E2E proof: this file.
  • Decision record: decision-record.md.
{
"project": "XLab physical compliance copy",
"market_learning": [
"Public wording that resembles recruitment, paid instruction, course structure, classes, teachers or student cohorts can increase supplementary education regulatory risk.",
"Copy changes must not be treated as a substitute for substantive compliance if the actual service is educational instruction.",
"Mature practice requires a risk dictionary, reviewer, publish gate and audit trail."
],
"pls_next_checks": [
"Does any XLab public page use education/enrollment-style wording?",
"Is every CTA framed as visit, collaboration inquiry, membership trial, or venue/service consultation?",
"Is there a legal reviewer before public launch?",
"Can PLS scan landing pages before publish?"
],
"assumptions": [
"XLab can position the offer as venue, community, project co-working and business collaboration rather than education enrollment.",
"Peggy or legal reviewer can review within D7."
],
"next_iteration": "Build copy scanner and publish gate for XLab website/CMS workflow."
}

Market Maturity

Sources

  1. 教育部《短期補習班設立及管理準則》

  2. 教育部《短期補習班設立及管理規則》

  3. 臺北市短期補習班管理規則修正資料

Maturity Gap

Current XLab risk is not only word choice. It is lack of a repeatable copy review and publish gate. Mature practice should include risk dictionary, replacement language, review owner, audit trail, and rollback.

This Round Closes

  • High-risk term table.
  • Replacement copy.
  • Review schema/API.
  • Acceptance tests.
  • People sync and D30 scanner path.

Remaining Gap

Build live scanner and integrate with website publish workflow.

People Sync

Target People

  • Louis: final positioning and publish decision.
  • Iron: copy owner and page update owner.
  • Peggy/legal: compliance review.
  • PLS: later scanner/publish gate implementation.

LINE Draft

XLab 實體這輪我先做成「合規文案轉換作戰台」了。重點不是單純把敏感詞換掉,而是把公開頁定位改成「空間體驗 / 會員方案 / 企業與專案共作」,避免看起來像招生、授課或補習服務。

請 Iron 今天先用替代表改 landing page,D7 前給 Peggy/法務看一次;Louis 只需要拍板三件事:Hero 主張、CTA、是否先上 staging。

若實質服務仍涉及依法需立案或許可的教育服務,請不要只靠文案上線,改走法務確認或主管機關確認。

Escalation

如果 D7 前沒有法務回覆,先上 staging、不上 public,並把高風險 CTA 全部改成預約參觀/洽詢合作。

Production Brief

場景

專案:XLab 實體。觸發訊號:重新包裝行銷網頁文案,移除師資、學生、課程、訓練營、梯次、課綱等觸法詞彙。

本輪不是協助規避法規,而是建立合規文案轉換與發布審核制度。若實質服務構成依法需立案、許可或受主管機關管理的教育服務,仍需由法務或主管機關確認;文案改寫只能降低誤導與不實廣告風險,不能取代實質合規。

D1 / D7 / D14 / D30

  • D1: 建立禁用詞、替代表、首版 landing copy、審核責任人。
  • D7: Louis/Iron/Peggy 或法務完成首版公開頁審核,發布「空間體驗與專案共作」頁。
  • D14: 把 CTA 與 CRM 流程改成預約參觀、洽詢合作、會員體驗席次,並保存審稿紀錄。
  • D30: 接入 PLS 文案 scanner、copy review API、publish gate 與 audit log。

Purpose-to-Purpose E2E

原始目的:降低 XLab 實體行銷頁觸法或誤導風險。

產出物:合規文案作戰台、風險詞替代表、首頁文案、資料模型、驗收、people sync、learning memory。

人採用:行銷用替代表改稿;法務用 checklist 驗收;owner 用 publish gate 決定是否上線。

指標改善:公開頁可安全發布、詢問轉換不中斷、審核時間下降、違規下架風險下降。

Owner / Due / Acceptance

  • Owner: louis.
  • Copy owner: iron.
  • Compliance reviewer: Peggy 或法務。
  • Due: D7 首版 landing copy QA。
  • Acceptance: 公開頁不出現高風險教育招生語氣;CTA 不寫成招生漏斗;每次發布有 scanner result、reviewer、diff、批准紀錄。

Production Readiness

Ready

  • Openable primary HTML artifact.
  • Homepage replacement copy.
  • Risk term table and replacement rules.
  • Data model and API path.
  • Permissions and audit path.
  • Acceptance tests.
  • People sync draft.
  • Decision record.

Not Yet Deployed

  • No website repository copy was changed in this round.
  • No legal approval has been obtained.
  • No live scanner or publish gate has been deployed.

Production Path

  1. Apply replacement copy to staging page.
  2. Run manual checklist from acceptance-tests.md.
  3. Get Peggy/legal review.
  4. Publish with audit note.
  5. Build /copy/scan and /copy/publish-gate.
  6. Add scanner to website PR check or CMS publish hook.

Rollback

If reviewer flags public copy after launch, rollback to previous approved page, mark asset rejected, preserve diff and review event, and rerun copy review.

Skill Usage

Selected Skills / Tools

  • using-superpowers: session discipline was checked earlier in this thread.
  • brainstorming: considered because this is creative/frontend work; heartbeat production instructions required build-first execution without waiting for approval.
  • frontend-design: used to shape the HTML artifact as a usable, polished control room rather than a generic document.
  • Web search: used for current legal/market context around supplementary education advertising and public copy risk.
  • apply_patch: used for file creation.
  • GitHub Gist: used for stable openable primary artifact.
  • curl / gh gist view: used for verification.

Evidence

Note

This is not legal advice. It is a production operating pack for copy risk reduction and review workflow.

Solution Selection

Selected Types

  • governance
  • SOP
  • tool
  • project
  • communication

Why This Combination

The problem is not a single sentence rewrite. It includes brand positioning, legal/advertising risk, launch pressure, owner overload, and the need to prevent future regressions. A tool-shaped production pack gives copy, rules, data model and acceptance tests in one place.

Why Not Smaller

Communication-only or doc-only output would not leave a reusable publish gate. It would likely create the same issue again when another page, ad or LINE message is drafted.

Why Not Larger

A full deployed scanner is the D30 target. This round should deliver the artifact and schema/API that make the next implementation straightforward.

<!doctype html>
<html lang="zh-Hant">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>XLab 實體合規文案轉換作戰台</title>
<style>
:root{--ink:#171717;--muted:#65615b;--paper:#f8f5ef;--card:#fffdf8;--line:#ded4c6;--black:#171717;--green:#2f6d50;--red:#a33b2f;--amber:#9b690f;--blue:#315c98}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:"Avenir Next","Noto Sans TC",ui-sans-serif,system-ui,sans-serif;line-height:1.55}header{padding:32px clamp(18px,4vw,56px);background:var(--black);color:#fff}main{padding:24px clamp(18px,4vw,56px) 48px}
h1{margin:0 0 12px;font-size:clamp(32px,4.5vw,58px);line-height:1.02;letter-spacing:0;max-width:1120px}h2{margin:0 0 12px;font-size:22px}h3{margin:0 0 6px;font-size:16px}p{margin-top:0}.sub{max-width:1080px;color:#ddd4c7;font-size:17px}.grid{display:grid;gap:16px}.kpis{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:22px}.two{grid-template-columns:1fr 1fr}.three{grid-template-columns:repeat(3,minmax(0,1fr))}.four{grid-template-columns:repeat(4,minmax(0,1fr))}.flow{grid-template-columns:repeat(5,minmax(0,1fr))}
.card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:18px}.darkcard{background:#24211d;border-color:#514b44;color:#fff}.metric{font-size:32px;font-weight:800}.label{color:var(--muted);font-size:13px}.darkcard .label{color:#cfc5b8}.pill{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-size:12px;background:#fff;margin:0 6px 8px 0;white-space:nowrap}.pill.dark{background:#2b2926;border-color:#55504a;color:#fff}
table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;padding:10px;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:12px;text-transform:uppercase;color:var(--muted)}code{background:#efe7da;border-radius:4px;padding:1px 5px}.bad{color:var(--red);font-weight:760}.ok{color:var(--green);font-weight:760}.warn{color:var(--amber);font-weight:760}.step{border:1px solid var(--line);border-radius:8px;padding:12px;min-height:126px;background:#fffaf1}.step strong{display:block;margin-bottom:6px;color:var(--blue)}.sample{font-size:15px;border-left:4px solid var(--green);padding-left:12px}.source a{color:var(--blue);word-break:break-word}
@media(max-width:960px){.kpis,.two,.three,.four,.flow{grid-template-columns:1fr}h1{font-size:34px}}
</style>
</head>
<body>
<header>
<span class="pill dark">PLS production pack</span><span class="pill dark">Solution: governance / SOP / copy tool</span>
<h1>XLab 實體合規文案轉換作戰台</h1>
<p class="sub">把 XLab 實體行銷頁從「看起來像補習、招生或授課」的語彙,轉成「空間體驗、專案共作、會員活動、企業場域解決方案」的合規表述;同時保留商業轉換力、審核流程、資料模型與人員同步節奏。</p>
<section class="grid kpis">
<div class="card darkcard"><div class="metric">0</div><div class="label">公開頁不得出現高風險教育招生語氣</div></div>
<div class="card darkcard"><div class="metric">3</div><div class="label">主軸:空間 / 會員 / 企業共作</div></div>
<div class="card darkcard"><div class="metric">D7</div><div class="label">完成首版 landing copy QA</div></div>
<div class="card darkcard"><div class="metric">D30</div><div class="label">接入文案審核與風險字詞 scanner</div></div>
</section>
</header>
<main class="grid">
<section class="grid two">
<div class="card">
<h2>本輪目的</h2>
<p>不是單純換字,而是把 XLab 實體的市場定位改成「實體場域與專案共作服務」。若實質活動已構成依法需立案或許可的教育服務,仍需走法務與主管機關確認;本工具只負責把公開行銷頁先降風險、提高一致性與可審核性。</p>
<span class="pill">Owner: louis</span><span class="pill">Copy owner: iron</span><span class="pill">Legal check: Peggy/法務</span>
</div>
<div class="card">
<h2>解法選型</h2>
<p><strong>governance / SOP / copy tool / project</strong>。因為卡點同時包含法規風險、品牌定位、跨人審稿與網頁落地,不適合只交一份文案;需要字詞禁用、替代表、審稿資料模型、驗收與下一輪 scanner。</p>
</div>
</section>
<section class="card">
<h2>D1 / D7 / D14 / D30</h2>
<div class="grid four">
<div class="card"><h3>D1</h3><p>凍結舊頁高風險文案;建立禁用詞、替代表、首版 landing copy。</p></div>
<div class="card"><h3>D7</h3><p>完成 Louis/Iron/Peggy 三方審核,發布一版「空間體驗與專案共作」頁。</p></div>
<div class="card"><h3>D14</h3><p>把報名/詢問流程改成會員洽詢與場域需求表,補資料留痕。</p></div>
<div class="card"><h3>D30</h3><p>接入 PLS 文案 scanner、審稿 API、風險稽核 log,形成可重複審核制度。</p></div>
</div>
</section>
<section class="card">
<h2>Purpose-to-Purpose E2E</h2>
<div class="grid flow">
<div class="step"><strong>原始目的</strong>降低 XLab 實體公開頁觸法或誤導風險。</div>
<div class="step"><strong>產出物</strong>合規文案控制台、替代表、資料模型、審核 SOP。</div>
<div class="step"><strong>人採用</strong>行銷用替代表改稿,法務用 checklist 驗收。</div>
<div class="step"><strong>指標改善</strong>頁面可發布、詢問轉換不斷、審稿時間下降。</div>
<div class="step"><strong>錢路徑</strong>避免違規下架與罰鍰風險,保留場地與會員方案成交。</div>
</div>
</section>
<section class="grid two">
<div class="card">
<h2>風險詞轉換表</h2>
<table>
<thead><tr><th>高風險語彙</th><th>替代表述</th><th>使用邊界</th></tr></thead>
<tbody>
<tr><td class="bad">師資 / 老師</td><td class="ok">引導者、共作主持人、業界顧問</td><td>不得暗示授課資格或升學補習成果。</td></tr>
<tr><td class="bad">學生 / 學員</td><td class="ok">會員、參與者、團隊、來訪者</td><td>不做成績、班級、在學身分暗示。</td></tr>
<tr><td class="bad">課程 / 課綱</td><td class="ok">活動設計、體驗流程、共作主題</td><td>若實質為連續教學,需另走合規判斷。</td></tr>
<tr><td class="bad">訓練營 / 梯次</td><td class="ok">期間限定專案、主題場次、會員共作日</td><td>避免招生、結業、保證學習成果語氣。</td></tr>
<tr><td class="bad">報名上課</td><td class="ok">預約參觀、洽詢合作、申請體驗席次</td><td>流程應接 CRM 洽詢,不直接寫成招生漏斗。</td></tr>
</tbody>
</table>
</div>
<div class="card">
<h2>可直接替換的首頁文案</h2>
<p class="sample"><strong>Hero:</strong> XLab 是給創業者、企業團隊與 AI builders 的實體共作場域。你可以在這裡預約專案討論、使用專注空間、參與主題共作日,讓想法更快變成可驗證成果。</p>
<p class="sample"><strong>CTA:</strong> 預約參觀 / 洽詢企業共作方案 / 申請會員體驗席次。</p>
<p class="sample"><strong>Section:</strong> 我們提供場域、工具、顧問型回饋與社群連結,協助團隊把 AI 專案、內容產品與商業實驗推進到可展示、可測量、可交付。</p>
</div>
</section>
<section class="grid three">
<div class="card"><h2>資料 / API</h2><p><code>copy_assets</code>, <code>risk_terms</code>, <code>copy_reviews</code>, <code>approval_events</code>;API: <code>/copy/scan</code>, <code>/copy/reviews</code>, <code>/copy/publish-gate</code>。</p></div>
<div class="card"><h2>權限 / 稽核</h2><p>Marketing 可提交;Project owner 可核准商業定位;Legal reviewer 可 block;每次發布需保存 diff、風險分、核准人。</p></div>
<div class="card"><h2>下一輪</h2><p>做成網頁文案 scanner:輸入 landing copy,自動標示高風險詞、建議替代語、產出審核紀錄。</p></div>
</section>
<section class="card source">
<h2>市場 / 法規成熟度輸入</h2>
<p>教育部《短期補習班設立及管理準則》要求招生宣傳誠信、公開、正確,且地方政府可管理補習班相關設立與招生事項:<a href="https://edu.law.moe.gov.tw/LawContent.aspx?id=GL001234">教育部法規</a></p>
<p>教育部《短期補習班設立及管理規則》指出補習班涉及對外公開招生、收費、授課等短期補習教育機構特徵:<a href="https://edu.law.moe.gov.tw/LawContent.aspx?id=GL001079">教育部法規</a></p>
<p>臺北市短期補習班管理規則修正資料提到招生廣告內容不得誇大不實、引人錯誤或違反其他法令,作為 landing copy 審核成熟度參考:<a href="https://laws.gov.taipei/caseatt/11283/1000624-2%E7%89%88-%E4%BF%AE%E6%AD%A3%E3%80%8C%E8%87%BA%E5%8C%97%E5%B8%82%E7%9F%AD%E6%9C%9F%E8%A3%9C%E7%BF%92%E7%8F%AD%E7%AE%A1%E7%90%86%E8%A6%8F%E5%89%87%E3%80%8D%E9%83%A8%E5%88%86%E6%A2%9D%E6%96%87-%E6%8F%90%E5%B8%82%E6%94%BF%E6%9C%83%E8%AD%B0%E8%A8%8E%E8%AB%96%E6%A1%88%E3%80%81%E5%B0%8D%E7%85%A7%E8%A1%A8%E3%80%81%E7%8F%BE%E8%A1%8C%E6%A2%9D%E6%96%87.pdf">臺北市法規資料</a></p>
</section>
</main>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment