breakthrough-performance-db-setup

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Breakthrough Performance DB Setup

突破性绩效数据库安装步骤

You are installing one system, for one student, once. The end state is narrow and checkable: their own ad spend is landing in their own copy of the Base every day, the numbers on it agree with Ads Manager, and their vault holds a note that tells next week's session where all of this lives.
The one sentence that governs everything below: every step of this install can fail while looking like it succeeded, so the job is not to complete the steps, it is to produce evidence that each one actually happened. A copied Base with a disabled workflow looks identical to a working one. A sync that pulled 25 of 500 rows looks like normal data. A margin field with the average order value typed into it produces a breakeven line that is wrong on every single verdict, in the same direction, forever, and never errors. That is what gates 4, 6, 8 and the runtime checks exist for.
您将为一位学员一次性安装一套系统。最终状态明确且可验证:学员的广告支出数据每日自动同步到其专属的Base副本中,数据与Ads Manager完全一致,且学员的知识库中留有说明,以便下周的课程能快速找到该数据库。
统领后续所有步骤的核心原则:安装的每一步都可能看似成功实则失败,因此任务不是完成步骤,而是提供每一步确实成功的证据。 带有禁用工作流的Base副本与正常工作的副本看起来毫无区别;只同步了500行数据中25行的同步任务看起来也像正常数据;将平均订单值误填入利润率字段会导致盈亏平衡线永久错误,但不会触发任何报错。这正是第4、6、8关以及运行时检查存在的意义。

Where you are in the product

当前所处的产品环境

This skill runs inside a vault built by
my-second-brain
, and does not ship with it.
It is installed and updated separately, and everything it writes into the vault obeys the vault it is standing in, not this file.
The law for anything that lands in the vault is that student's own
99_Meta/structure-doctrine.md
, read live, at the moment you write.
⛔ This package carries no copy of it. Section 8 declares the shape of the note you write, section 0 is the filing decision tree, section 5 is the law on names. ⛔ Never a remembered version of section 8, and ⛔ never a key list quoted from here: this student may have amended their own constitution.
The asymmetry matters, so do not over-apply the rule above. The vault has a live source of law and you read it. Lark and Meta do not. There is no file in the student's world that records how a copied Base behaves, what
+field-update
silently destroys, or which failure a Meta token typically has, so the
references/
files in this package carry that knowledge in full, and they are the source. Read the vault's law live; read this package's mechanics from this package.
This skill promises nothing. No "installs in one session", no estimate of how long it takes, no claim about what the student will have by the end. Some students are blocked at gate 1 by an agency that owns their ad account, and there is no version of this install that rescues them. State what the current gate needs and what its pass test is. ⛔ Never put a duration or an outcome in the student's mouth before it exists.
Speak the student's own language. This file is in English; the session is not. Match whatever they write to you, including code-switching, and keep the field names and the verdict words exactly as they appear on their board.
本技能运行在
my-second-brain
构建的知识库中,但不随该工具一同分发。
它需单独安装和更新,且所有写入知识库的内容都遵循当前所在知识库的规则,而非本文件的规则。
写入知识库的所有内容必须严格遵循学员实时的
99_Meta/structure-doctrine.md
文件。
⛔ 本工具包不包含该文件的副本。第8节规定了您要写入的说明格式,第0节是归档决策树,第5节是命名规则。⛔ 绝不能依赖记忆中的第8节内容,也绝不能引用本文件中的关键列表:学员可能已修改了他们自己的规则。
注意规则的不对称性,不要过度套用上述规则。 知识库有实时的规则来源,您需要读取它。而Lark和Meta没有。 学员的环境中没有记录Base副本的行为、
+field-update
会静默破坏什么,或者Meta令牌通常会出现哪些故障的文件,因此本工具包中的
references/
文件完整包含了这些知识,是此类内容的唯一来源。实时读取知识库的规则;从本工具包读取操作机制。
本技能不做任何承诺。 不承诺“一次会话完成安装”,不承诺安装时长,不承诺学员最终能获得什么。有些学员在第1关就会因广告账户由代理商控制而受阻,本安装流程无法解决此类问题。只需说明当前关卡的要求和通过标准即可。⛔ 在结果出现前,绝不要替学员预估时长或承诺结果。
使用学员熟悉的语言沟通。 本文件为英文,但会话语言不一定是。匹配学员的沟通语言,包括语码转换,且字段名称和判定术语需与学员看板上的完全一致。

Gate 0: the toolchain, and it is a gate

第0关:工具链检查,这是一道必过关卡

Every gate from 2 onward reaches the student's Base through
lark-cli
, under the student's own identity.
Gate 2 copies the template and reads the roster off the copy, gate 4 writes Targets and reads the row back, gate 5 clears six tables and counts them, gate 7 edits the sync workflow, gate 8 re-sums the raw rows without going through the board's own totals. ⭐ So this is not an accessory to gate 2. It is the floor the rest of the install stands on, and a session that discovers it missing at gate 4 has already spent the student's evening on gates 1 through 3.
Three checks, and they are checks rather than questions, the same discipline as gate 1's vault probe: you are looking for something that either works or does not, ⛔ never for the student's opinion about whether it is installed.
  1. lark-cli --version
    returns a version.
  2. lark-cli whoami
    returns a user identity whose token is not
    needs_refresh
    . ⚠️ A user token expires quietly (
    lark-lessons.md:76
    ), and an expired one surfaces much later as a parse error on an auth object, which reads like a broken script rather than a dead login.
  3. lark-cli base +base-get --base-token <the master token in references/template-and-teaching.md>
    returns the template's info. ⭐ This single call proves four things at once: the CLI is installed, the login is alive, the scopes reach Base, and this student can actually see the template. It is the same shape as gate 6, where one Insights call proves the app, the Marketing API product, the System User and
    ads_read
    together.
When a check fails, the fix is the student's to run, and the browser part of it is two round trips:
  • npm install -g @larksuite/cli
    if check 1 found nothing. ⚠️ On a machine whose npm prefix is not on the shell's
    PATH
    , this succeeds and the binary still appears missing; resolve it by full path before concluding the install failed.
  • lark-cli config init --new
    creates and binds a Lark app through the browser. ⛔ They do not have to hand-build an app in the developer console, and ⛔ you do not send them there.
  • lark-cli auth login --domain base,drive
    grants the scopes.
    drive
    is needed alongside
    base
    , because copying a Base creates a file in their Drive.
  • Guide it; do not attempt to do it for them. Both commands block on a browser step only they can complete. Run the first in the background, take the verification URL out of its output, and hand them the URL exactly as printed. ⛔ Never retype, re-encode or reassemble that URL.
Never offer the owner's credentials as a shortcut, at this gate or any later one. They authorise the owner's entire tenant, they cannot be moved between machines in any case because the user token lives in the OS keychain (
lark-lessons.md:70
), and a copy made under them would land in the owner's Drive rather than the student's.
⚠️ One failure this gate cannot fix, and naming it beats looping on it: a tenant that will not let this student create an app. A personal Lark tenant makes them their own admin and it is theirs to do; a company tenant may refuse. If
config init --new
cannot complete for that reason, say which piece is blocked and who inside their organisation unblocks it, and stop. ⛔ There is no workaround, and improvising one is worse than the honest stop.
Pass test: check 3 returned the template's info under the student's own identity. ⛔ Not "they said they installed it".
从第2关开始的所有操作都将通过
lark-cli
,以学员自身身份访问其Base。
第2关复制模板并读取副本的列表,第4关写入目标值并回读数据,第5关清空6个表格并计数,第7关编辑同步工作流,第8关绕过看板自身的总计功能重新汇总原始数据。⭐ 因此这不是第2关的附属步骤,而是整个安装流程的基础,如果在第4关才发现工具缺失,就已经浪费了学员在第1到3关中的时间。
三项检查,且是验证性检查而非询问,与第1关的知识库探查遵循相同原则:您要确认功能是否正常工作,⛔ 绝不要询问学员是否已安装。
  1. lark-cli --version
    返回版本信息。
  2. lark-cli whoami
    返回用户身份,且令牌状态不是
    needs_refresh
    。⚠️ 用户令牌会静默过期(
    lark-lessons.md:76
    ),过期令牌会在后续触发解析错误,看起来像是脚本故障而非登录失效。
  3. lark-cli base +base-get --base-token <references/template-and-teaching.md中的主令牌>
    返回模板信息。⭐ 这一个调用同时验证了四件事:CLI已安装、登录有效、权限覆盖Base、学员确实能看到该模板。这与第6关的逻辑一致:一次Insights调用即可验证应用、Marketing API产品、System User和
    ads_read
    权限是否正常。
当检查失败时,修复操作由学员执行,浏览器端需完成两个步骤:
  • 如果检查1无返回结果,执行
    npm install -g @larksuite/cli
    。⚠️ 如果机器的npm前缀不在shell的
    PATH
    中,安装会成功但二进制文件仍无法找到;需先通过完整路径解决此问题,再判定安装失败。
  • lark-cli config init --new
    通过浏览器创建并绑定Lark应用。⛔ 学员无需在开发者控制台手动构建应用,您也不要引导他们前往该页面。
  • lark-cli auth login --domain base,drive
    授予权限。
    drive
    权限与
    base
    权限缺一不可,因为复制Base会在Drive中创建文件。
  • 引导操作,但不要替学员完成。 这两个命令都需要学员在浏览器中完成步骤才能继续。在后台运行第一个命令,从输出中提取验证URL,并将URL原封不动地交给学员。⛔ 绝不要重新输入、重新编码或拼接该URL。
绝不要提供所有者的凭证作为捷径,无论是在本关还是后续关卡。 这些凭证授权访问所有者的整个租户,且无法在机器间转移(因为用户令牌存储在操作系统密钥链中,
lark-lessons.md:70
),使用所有者凭证创建的副本会存入所有者的Drive而非学员的Drive。
⚠️ 本关无法修复的一种故障:租户不允许学员创建应用。 个人Lark租户中,学员是自己的管理员,可自由操作;企业租户可能会拒绝。如果
config init --new
因此无法完成,说明具体受阻环节以及需要联系组织内哪个角色解决,然后停止操作。⛔ 没有变通方案,临时拼凑方案比如实告知更糟糕。
通过标准:检查3以学员自身身份返回了模板信息。 ⛔ 不是“学员说已安装”。

Gate 1: Qualification, in full

第1关:资格验证,完整流程

This is the gate most likely to end in "no, and there is no workaround", which is why it is near the front and why it is written out here rather than in a reference file. ⛔ It is not the only one: gate 0 can end with a tenant that refuses to let them create an app, gate 6 can end with Meta refusing access, and this package promises no gate a fix. Running gates 2 through 7 for someone who was going to fail gate 1 wastes their evening and yours.
Three checks about access. Ask directly, and take the answers as claims to be confirmed later, not as facts:
  1. They own their own Meta Business Manager. ⛔ An agency-owned account is the disqualifier. The student cannot create the System User the sync needs, and no amount of "I'll ask my agency" resolves it inside this session.
  2. They are an admin on the ad account, not an advertiser or an analyst.
  3. They have a Lark account that can hold a Base. ⭐ Gate 0 already proved this one physically, so treat it as settled rather than asking again.
Checks 1 and 2 are load-bearing but self-reported, and that is acceptable here, because a student who is wrong about them fails physically at gate 6, where creating a System User and calling Insights either works or does not. Gate 1 is there to save the ones who already know the answer is no.
A fourth check that is a check, not a question: probe the vault. Look for
99_Meta/structure-doctrine.md
.
  • You are looking for a file. If you do not know where their vault is, you may ask that one question ("where is your vault?") and then probe. ⛔ You may not ask "do you have a second-brain vault?", because that question returns an opinion and what you need is a file that either exists or does not.
  • If the file is absent, stop the install. Say plainly that this system leaves a note behind so next week's analysis can find the database without asking again, that the note has to be filed under a law this vault does not have yet, and that installing the vault is a separate job (
    my-second-brain
    ) which is theirs to run. Say what is missing, say who fixes it, and stop.
  • Do not degrade to writing a plain note instead. A note in a shape the vault does not recognise is worse than no note: the vault's own maintenance pass will not see it, the frontmatter guard will refuse or flag it, and the student now believes they have a pointer they do not have.
A fifth thing, which is a question, and it is the one people skip: "how are your leads attributed back to a specific ad?" Not "do you track leads", but how does a lead that arrives today get connected to the ad that produced it. Make them describe the actual mechanism: a per-ad WhatsApp click-to-chat link, a form field, a landing page parameter, a dedicated phone number.
State the scope-out here, at gate 1, before anything is copied. In substance, out loud:
This whole system runs on one text key:
<ad-id>__<YYYY-MM-DD>
. Every rolling window, every cost-per-qualified figure, every verdict is a lookup on that key. A walk-in customer cannot carry an ad-id. A phone call to a shared number cannot carry an ad-id. If that is how most of your leads arrive, the ad half of this board will be right and the lead half will be empty, and no migration, no formula and no later fix can invent a key that was never captured at the moment the lead arrived.
Say this at gate 1 or the student concludes the material is broken. They will not conclude "my attribution does not fit"; they will conclude the system does not work, three weeks after they built it, with their own data in it.
When the funnel does not fit, say so plainly. ⛔ Never pretend it fits, and ⛔ never quietly widen the definition of a "conversation" to make their numbers appear. The session may walk them through the existing design so they can build their own variant of the lead half. That is a legitimate thing to do and often the right one. ⭐ If it does, it MUST record what was actually built in the student's vault note, because next week's analysis will read that note and assume the standard shape unless the note says otherwise. The procedure is in references/vault-note.md.
这是最可能以**“无法安装,且无变通方案”**告终的关卡,因此放在最前面,并在此处详细说明而非放入参考文件。⛔ 这不是唯一可能失败的关卡:第0关可能因租户拒绝创建应用而失败,第6关可能因Meta拒绝访问而失败,本工具包不承诺解决任何关卡的故障。为无法通过第1关的学员执行第2到7关的操作,只会浪费双方的时间。
三项关于访问权限的检查。直接询问,并将答案视为后续需要验证的声明而非事实:
  1. 学员拥有自己的Meta Business Manager。 ⛔ 由代理商控制的账户不符合要求。学员无法创建同步所需的System User,且“我会询问我的代理商”无法在本次会话内解决问题。
  2. 学员是广告账户的管理员,而非广告主或分析师。
  3. 学员拥有可创建Base的Lark账户。⭐ 第0关已验证过此点,无需再次询问。
检查1和2是关键但由学员自报,这在此处是可接受的,因为如果学员说错,会在第6关实际操作中失败:创建System User和调用Insights要么成功要么失败。第1关的作用是筛选出已知自己不符合要求的学员。
第四项验证性检查,而非询问:探查知识库。 查找
99_Meta/structure-doctrine.md
文件。
  • 您要找的是文件本身。 如果不知道学员的知识库位置,可问一次“您的知识库在哪里?”然后探查。⛔ 不要问“您有my-second-brain知识库吗?”,因为这个问题得到的是主观回答,而您需要的是客观存在的文件。
  • 如果文件不存在,停止安装。 明确说明本系统会留下说明,以便下周的分析无需询问即可找到数据库;该说明必须遵循知识库的归档规则,但当前知识库尚无此规则;安装知识库是独立任务(
    my-second-brain
    ),需学员自行完成。说明缺失的内容、负责修复的角色,然后停止。
  • 不要退而求其次写普通说明。 不符合知识库规则的说明比没有更糟:知识库的维护流程无法识别它,前置守卫会拒绝或标记它,而学员会误以为自己有可用的指向说明。
第五项是问题,也是常被忽略的一点:“您的线索是如何归因到特定广告的?” 不是“您是否跟踪线索”,而是今天产生的线索如何关联到对应的广告。让学员描述实际机制:每个广告专属的WhatsApp点击聊天链接、表单字段、着陆页参数、专用电话号码。
在第1关就明确说明不适用场景,不要等到复制模板后。 直白地说:
整个系统基于一个文本键:
<ad-id>__<YYYY-MM-DD>
。每个滚动窗口、每个合格线索成本、每个判定结果都基于此键查询。自然到访的客户无法携带ad-id。拨打共享号码的电话无法携带ad-id。 如果您的大部分线索都是通过这种方式获得的,看板的广告数据部分会准确,但线索数据部分会为空,任何迁移、公式或后续修复都无法凭空生成线索产生时未捕获的键。
必须在第1关说明这点,否则学员会认为工具存在问题。 他们不会觉得“我的归因方式不匹配”,而是会在三周后用自己的数据验证时,认为系统无法正常工作。
如果漏斗不匹配,直白说明。 ⛔ 绝不要假装匹配,也绝不要悄悄扩大“对话”的定义来让数据看起来合理。会话可以引导学员了解现有设计,以便他们自行修改线索部分。这是合理且通常正确的做法。⭐ 如果这样做,必须在学员的知识库说明中记录实际构建的内容,因为下周的分析会读取该说明,除非说明中另有标注,否则会默认是标准配置。具体流程见references/vault-note.md

Gates 2 to 10, in governing form

第2至10关,核心流程

2. Copy the template, and you run the copy.
lark-cli base +base-copy
does in one call what the student would otherwise do by hand
, under their identity from gate 0, and the copy lands in their Drive owned by them. ⛔ This is not the thing the "template, not a provisioner" rule forbids. That rule is about building the Base field by field: several hundred calls, every one a failure point. A copy is one call. ⛔ It runs under the student's own credentials and never the owner's, because the new Base belongs to whoever's token made it and the API has no parameter that says otherwise. Then resolve every table by name, and read the roster off their copy at runtime, because
table_id
regenerates on copy (
lark-lessons.md:706
), so an id written down anywhere is a bug waiting for its second student. ⛔ Pass the copy an explicit time zone. The call does not inherit one, and a copy made without it carries a timer whose time of day is not the time of day you can see on the template, so every student's 07:00 is quietly some other hour. The flag and its exact form are with the command in references/template-and-teaching.md. ⛔ Pass test item 1: the token of their copy is not the master token (references/changing-the-base.md §0). ⭐ Running the copy yourself makes that check stronger rather than redundant: the token now arrives as an API return value instead of off a student's clipboard. The master passes every other check on the list, because it is the healthy original; only the token tells the two apart. Then: all eight tables resolve by name, and the sync workflow came across disabled (a copy carries the workflow and keeps it disabled,
lark-lessons.md:702
). ⛔ The manual path is not deleted. If the call fails after gate 0 passed, hand them the link, let them click, and rejoin at the same pass test. The command, its conditions and the one new failure it introduces are in references/template-and-teaching.md.
3. Teach the demo board.Teaching, not an exam. Never ask "do you understand what this means" and then gate the install on the answer. ⭐ Show them one pair and stop: the cheapest ad per conversation on the board is a KILL, the most expensive is a SCALE. That single comparison is the reason this whole system exists. ⛔ Do not tour the other verdicts; they arrive on their own every week, attached to the student's own ads. There is no pass test here on purpose: they re-hear the whole thing next week with their own money on the board, which is when it actually lands.
4. Fill in Targets.They say the numbers, you write them in (references/changing-the-base.md applies: token check, then read the row back). ⛔ Do not send them in to type it themselves: the error this gate exists to stop is the order value landing in the margin field, and with you holding the keyboard it cannot happen at all. Compute the breakeven from their answers and get their agreement before you write. Ask which currency the figures are in and record it; gate 6 has no other source for that. ⭐ This is where a single wrong number poisons every future verdict in the same direction, because the pass line for ROAS is their breakeven point and breakeven is derived from margin. Two hard checks, both in the reference: gross margin greater than or equal to average order value is dead on arrival, and breakeven ROAS landing near 1.0 is the signature of typing the order value into the margin field. Pass test: they have seen the breakeven number their own inputs produced, and they agree with it.
5. Clear the demo data. Six tables to zero; Targets and Account keep their one row each. ⛔ Forgetting this mixes demo rows into real ones and every figure on the board is quietly wrong. This is a change to their Base, so it runs under references/changing-the-base.md, and it is verified by re-listing and counting the rows yourself. ⭐ The ad layer you empty here is refilled by the first sync rather than by hand, and the pass test for that lands at gate 7; both are in references/template-and-teaching.md.
6. Get the Meta token.Do not hardcode click paths. Meta's UI is renamed and rearranged constantly, and a skill full of stale menu names teaches the student that the material is out of date. Find the current flow at runtime and guide them through it. ⭐ Verify the end state, not the steps: one successful Insights call proves the app, the Marketing API product, the System User, the assignment and
ads_read
all at once, and it survives every redesign. ⚠️ But a successful call does not prove provenance. A short-lived user token also passes, and that is the single most common failure of this gate, discovered weeks later when the sync stops. So check expiry and provenance too, and on failure name which of the four pieces is missing rather than saying it did not work. The procedure, and the three runtime checks that hang off this first live call, are in references/meta-token-and-sync.md.
7. Wire the sync. Every placeholder replaced, workflow enabled, run once by hand, and rows actually present afterwards. ⛔ Do not carry a placeholder count into this gate: read the workflow for how many HTTP steps it has and read each step for its own, because a step you never wired fails silently and only that step's table stops moving. Three things make the pass test, and rows are only the first. Rows in Ad Daily, not a green run. The ad layer refilled, at the row count gate 5's clearing implies. And
Account.sync-last-run
read back and holding this run: the gate stamps last, so a stamping failure leaves a run that looks perfectly healthy and produces its duplicate on the next trigger instead. ⛔ Never read "the workflow ran" as "the data arrived", and never read "the data arrived" as "the gate held".
8. Reconciliation, and it is a gate, not a request."Does it match?" answered with "yes" is not evidence. You did not observe that comparison happen, and every failure this system can have (a key with a stray space, a formula bound to the wrong object, a rollup silently returning zero) returns a plausible number rather than an error. ⭐ Make the evidence flow toward you: you name the date range, the student reports the Ads Manager figure, the token independently pulls Insights for the same range, and you re-sum the raw Ad Daily rows yourself, not through the Base's own rollups, because the rollups are one of the things under test. Three-way diff. Details in references/reconciliation-and-handover.md.
9. Write the vault note. One
it-system
note in the business wing's
01_Assets/IT-Systems/
, carrying the pointer to the Base and everything next week's session would otherwise have to ask for. One business wing resolves silently; two or more, ask once which business owns this ad account. ⛔ The Meta token never enters it. The full contract, including the frontmatter, the read-before-write rule and the filing-log line, is in references/vault-note.md.
10. Handover. Keep it short, and make the content an order of reading, not a feature tour: is the sync fresh, then can the team absorb more leads, and only then the verdict. ⛔ A student who reads SCALE first and acts on it will pour money into a funnel nobody is answering. Two caveats belong here and nowhere else: the Meta token sits in the workflow where anyone with edit rights on that Base can read it, and the timezone and currency facts from gate 6's runtime checks. In references/reconciliation-and-handover.md.
2. 复制模板,由您执行复制操作。
lark-cli base +base-copy
可一键完成学员手动操作的步骤
,使用第0关中验证的学员身份,副本会存入学员的Drive并归其所有。⛔ 这不属于“模板而非配置器”规则禁止的行为。 该规则禁止逐字段构建Base(数百次调用,每一步都可能失败)。而复制只需一次调用。⛔ 必须使用学员自身的凭证执行,绝不能使用所有者的凭证,因为新Base的归属由创建它的令牌决定,API没有其他参数可修改此属性。然后按名称解析所有表格,并在运行时读取副本的列表,因为复制后
table_id
会重新生成(
lark-lessons.md:706
),任何预先记录的id对其他学员来说都是隐患。⛔ 为副本指定明确的时区。 调用不会继承时区,如果未指定,副本的计时器时间会与模板显示的时间不一致,导致学员的07:00实际是其他时间。具体参数格式见references/template-and-teaching.md中的命令。⛔ 通过标准1:学员副本的令牌不是主令牌references/changing-the-base.md §0)。⭐ 由您执行复制操作会让该检查更可靠:令牌作为API返回值获取,而非学员粘贴的内容。主模板能通过其他所有检查,因为它是健康的原始版本;只有令牌能区分两者。然后:所有8个表格都能按名称解析,且同步工作流处于禁用状态(复制操作会保留工作流并保持禁用,
lark-lessons.md:702
)。⛔ 不删除手动操作路径。 如果第0关通过但调用失败,将链接交给学员让其点击,然后回到相同的通过标准继续。命令、条件及可能出现的新故障见references/template-and-teaching.md
3. 演示看板教学。是教学而非测试。 绝不要问“您理解这是什么意思吗”并以此作为安装的关卡。⭐ 展示一组对比即可停止:看板上每对话成本最低的广告标记为KILL(停止投放),最高的标记为SCALE(加大投放)。这正是整个系统存在的意义。⛔ 无需讲解其他判定结果;下周学员看到自己的广告数据时,会自动理解这些内容。本关故意不设通过标准:下周学员看到自己的资金投入数据时,会重新理解整个系统。
4. 填写目标值。学员提供数值,您负责填入(遵循references/changing-the-base.md:先验证令牌,再回读数据)。⛔ 不要让学员自行输入:本关要避免的错误就是将订单值误填入利润率字段,由您操作可完全避免此类问题。根据学员的答案计算盈亏平衡值,并在填入前获得学员确认。询问数值的货币类型并记录;第6关没有其他获取该信息的途径。⭐ 此处一个错误的数值会导致未来所有判定结果同向错误,因为ROAS的及格线是学员的盈亏平衡点,而盈亏平衡点由利润率计算得出。参考文件中有两项严格检查:毛利率大于或等于平均订单值时,系统完全无法正常工作盈亏平衡ROAS接近1.0是将订单值误填入利润率字段的典型特征。通过标准:学员已看到自己输入的数值计算出的盈亏平衡值,并表示认可。
5. 清除演示数据。 将6个表格清空;Targets和Account表格保留各自的一行数据。⛔ 忘记此步骤会导致演示数据混入真实数据,看板上的所有数值都会悄然出错。这是对学员Base的修改,需遵循references/changing-the-base.md,并由您重新列出并计数行数以验证。⭐ 此处清空的广告数据层会由第一次同步自动填充,而非手动填充,对应的通过标准在第7关;两者均见references/template-and-teaching.md
6. 获取Meta令牌。不要硬编码点击路径。 Meta的UI经常重命名和调整,充满过时菜单名称的技能会让学员认为内容已过期。在运行时找到当前流程并引导学员完成。⭐ 验证最终状态,而非步骤:一次成功的Insights调用即可同时验证应用、Marketing API产品、System User、权限分配和
ads_read
权限,且不受UI redesign影响。⚠️ 但成功的调用无法验证来源。 短期用户令牌也能通过验证,这是本关最常见的故障,会在数周后同步停止时才被发现。因此还需检查过期时间和来源,失败时明确说明缺少哪四个要素之一,而非只说失败。具体流程及基于首次实时调用的三项运行时检查见references/meta-token-and-sync.md
7. 配置同步功能。 替换所有占位符,启用工作流,手动运行一次,确认数据已同步。⛔ 不要依赖预设的占位符数量:读取工作流中的HTTP步骤数量,并逐个检查每个步骤的占位符,因为未配置的步骤会静默失败,仅该步骤对应的表格无法更新。通过标准包含三点,数据同步只是第一点。 Ad Daily表格中有数据,而非仅显示运行成功。广告数据层已填充,行数与第5关清空后的预期一致。
Account.sync-last-run
回读值为本次运行时间:本关最后会标记运行时间,标记失败会导致看似正常的运行,并在下次触发时产生重复数据。⛔ 绝不要将“工作流已运行”等同于“数据已同步”,也不要将“数据已同步”等同于“本关已通过”。
8. 对账,这是一道必过关卡,而非请求。“是否匹配?”得到“是”的回答不算证据。 您未亲眼看到对比过程,且本系统可能出现的所有故障(键包含多余空格、公式绑定到错误对象、汇总功能静默返回0)都会返回看似合理的数值,而非报错。⭐ 让证据向您流动:您指定日期范围,学员提供Ads Manager的数值,令牌独立提取同一范围的Insights数据,您自行重新汇总Ad Daily的原始行数据,而非依赖看板自身的总计功能,因为总计功能正是被测试的对象。三方比对。详细说明见references/reconciliation-and-handover.md
9. 写入知识库说明。 在业务板块的
01_Assets/IT-Systems/
中创建一条
it-system
类型的说明,包含指向Base的链接以及下周课程所需的所有信息。如果只有一个业务板块,自动归档;如果有多个,询问一次该广告账户属于哪个业务。⛔ Meta令牌绝不能写入说明。 完整规范包括前置内容、写入前读取规则和归档日志行,见references/vault-note.md
10. 交接。 保持简短,内容为阅读顺序,而非功能介绍:先确认同步是否最新,再确认团队能否承接更多线索,最后查看判定结果。⛔ 如果学员先看SCALE结果并采取行动,会将资金投入到无人跟进的漏斗中。此处需说明两个注意事项:Meta令牌存储在工作流中,任何拥有该Base编辑权限的人都能读取它;以及第6关运行时检查得到的时区和货币信息。见references/reconciliation-and-handover.md

Loading the rest of this skill

加载本技能的剩余内容

WhenRead
Gates 2 to 5, the Lark sidereferences/template-and-teaching.md
Gates 6 and 7, the Meta sidereferences/meta-token-and-sync.md
Gates 8 and 10references/reconciliation-and-handover.md
Gate 9, anything landing in the vaultreferences/vault-note.md
Any change to the student's Base, at any gatereferences/changing-the-base.md
Load on demand, at the gate that needs it. A session that reads all five before it starts has spent its context on the whole install to run the first gate of it.
时机读取文件
第2至5关,Lark相关操作references/template-and-teaching.md
第6至7关,Meta相关操作references/meta-token-and-sync.md
第8和10关references/reconciliation-and-handover.md
第9关,写入知识库的所有内容references/vault-note.md
任何修改学员Base的操作,任何关卡references/changing-the-base.md
按需加载,在需要的关卡读取。 开始前就读完所有五个文件会让您在执行第一关时丢失上下文。

Iron lines

铁则

  • The Meta token never enters the vault, in any note, in any example, in any quoted error message. It lives in the workflow placeholder and nowhere else this skill touches.
  • Every change to the student's Base obeys references/changing-the-base.md, including its §1a. That file separates three kinds of change, and only one of them carries the four conditions: filling gate 7's placeholders is install-time configuration, a migration to an already-working Base needs all four (declared in this package, versioned with it, recorded in the vault note, detectable as already-applied), and a student-owned variant satisfies none of the first two and instead owes a written record plus permanent unknown-shape treatment. ⛔ Do not apply the four conditions to all three: that forbids installing and forbids the variant this skill is explicitly allowed to help build. The test is whether the next session, holding only this skill and that note, can state what shape this Base is in. If it cannot, what you did was improvisation, and improvisation is what makes a student's copy undiagnosable.
  • Read before you write, on any vault path that might already exist. The frontmatter guard watches births only:
    fm-guard-hook.sh:346
    allows an existing path straight through, with the comment "an edit, not a birth; this guard watches births", and
    fm-guard-hook.sh:369
    shows Edit is not even a matcher. So a second install run that blind-writes the note replaces the whole file, silently, with nothing to stop it.
  • Vault notes go through the Write tool, never through Bash. The guard can read a Write and check the frontmatter inside it; it cannot read the contents of a heredoc, and its regex blocks
    >>
    as well. A note written through the shell skips the only check that would have caught its shape.
  • Exit code is never evidence, and
    ok: true
    is never evidence.
    Read back what you wrote, count what you cleared, and compare it to what you intended.
  • Meta令牌绝不能进入知识库,任何说明、示例或报错引用中都不能出现。它只能存储在工作流的占位符中,本技能不会将其存储在其他任何位置。
  • 任何修改学员Base的操作都必须遵循references/changing-the-base.md,包括其§1a。 该文件将修改分为三类,只有一类需要满足四个条件:填充第7关的占位符属于安装时配置,对已正常运行的Base进行迁移需要满足全部四个条件(在本工具包中声明、随工具包版本化、记录在知识库说明中、可检测是否已应用),学员自主修改的变体不满足前两类的任何条件,只需留下书面记录并按未知格式永久处理。⛔ 不要将四个条件应用于所有三类修改:这会禁止安装,也禁止本技能明确允许协助构建的变体。判断标准是:仅使用本技能和说明,下次会话能否说明该Base的配置。如果不能,您的操作就是即兴修改,而即兴修改会让学员的副本无法诊断。
  • 写入前先读取任何可能已存在的知识库路径。 前置守卫仅监控新文件的创建:
    fm-guard-hook.sh:346
    允许直接编辑现有路径,注释为*“这是编辑,不是创建;本守卫只监控创建”*,且
    fm-guard-hook.sh:369
    显示编辑甚至不是匹配项。因此,第二次安装时盲目写入说明会静默覆盖整个文件,且没有任何阻止机制。
  • 知识库说明必须通过Write工具写入,绝不能通过Bash。 守卫能读取Write工具的内容并检查前置信息;但无法读取here文档的内容,且其正则表达式会阻止
    >>
    操作。通过shell写入的说明会跳过唯一能检查格式的守卫。
  • 退出码绝不是证据,
    ok: true
    也绝不是证据。
    回读您写入的内容,计数您清空的行数,并与预期结果对比。

Judgment you need while installing

安装时需注意的判断要点

Three facts about this template that will otherwise cost you an afternoon each:
  • NOW()
    freezes inside a formula;
    TODAY()
    does not
    (
    lark-lessons.md:180-181
    , measured against this exact template). ⭐ That is why every rolling window on this board is a live formula and the sync computes nothing at all: it writes raw rows, and the board does the arithmetic. ⛔ So never "fix" a stale window by writing a number into it. The window is not stale, and a literal there is a lie that never expires.
  • A link field named the same as the table it points at silently resolves to the whole table (
    lark-lessons.md:95
    ). It returns every row's value joined into one string, does not error, and every row shows the identical value, which reads like a data problem rather than a schema one. If you ever create or rename a field here, ⛔ never give it a table's name.
  • Cross-table rollups fail silently and downward. Rows written by the sync do not attach themselves to link fields, so a rollup written across a link quietly omits them (
    lark-lessons.md:680
    ); a formula column used as a FILTER result column comes back empty rather than erroring (
    lark-lessons.md:222
    ). Both return a plausible smaller number. ⭐ That is precisely why gate 8 re-sums the raw Ad Daily rows itself instead of trusting the board's own totals: the totals are the thing being tested.
关于该模板的三个事实,忽略任何一个都可能浪费您一下午的时间:
  • NOW()
    在公式中会冻结;
    TODAY()
    不会
    lark-lessons.md:180-181
    ,针对本模板测试)。⭐ 这就是为什么看板上的每个滚动窗口都是实时公式,而同步任务不做任何计算:它只写入原始行数据,由看板完成运算。⛔ 绝不要通过写入数值来“修复”看似过期的窗口。窗口并非过期,写入的固定值是永久错误。
  • 与指向表格同名的链接字段会静默解析为整个表格
    lark-lessons.md:95
    )。它会将每行的值拼接成一个字符串返回,不会报错,且每行显示相同的值,看起来像是数据问题而非架构问题。如果您在此处创建或重命名字段,⛔ 绝不要使用表格的名称。
  • 跨表汇总会静默失败且结果偏小。 同步写入的行不会自动关联到链接字段,因此跨链接字段的汇总会静默忽略这些行(
    lark-lessons.md:680
    );用作FILTER结果列的公式列会返回空值而非报错(
    lark-lessons.md:222
    )。两者都会返回看似合理的较小数值。⭐ 这正是第8关要自行重新汇总Ad Daily原始行数据而非依赖看板总计的原因:总计功能正是被测试的对象。

Settled, and not to be reopened

已确定且不再讨论的事项

Recorded so no session spends a student's time relitigating a decision already made:
  • The template ships as it is. No redesign, no wide schema, no second template, no A/C split, no e-commerce variant, no mode flags. All of these were considered and reversed. A proposal to add one is a product decision, not a session decision.
  • ⚠️ Version stamps were on that list and are no longer. The product owner reversed that one on 2026-08-24, which is the route this line names, and the template now carries
    Account.template-version
    . ⛔ Read the three clauses in references/changing-the-base.md §1 before you use it: they keep it out of the shape decision entirely. ⛔ The reversal is not a precedent for anything else on the list above.
  • This skill never amends anyone's vault doctrine and never proposes adding a
    type:
    to it to make room for its note. That is the vault owner's business, taken with their own vault tooling.
  • This skill never edits the template Base itself, only the student's copy of it. Reading it is fine, and gate 0's third check does exactly that; ⛔ writing to it is the one thing changing-the-base.md §0 exists to stop.
  • The copy runs under the student's credentials or it does not run. Settled: the session performs the copy rather than asking the student to click it, and it never does so with the owner's identity. A proposal to ship the owner's credentials, in any wrapper, is not a session decision and not a product one either.
  • The install is the deliverable, and the vault note is what makes it survive. A perfectly wired Base with no note is a system the student will be unable to explain, and that next week's session will have to rediscover by interrogation.
记录这些是为了避免会话浪费学员时间重新讨论已做出的决策:
  • 模板按当前版本分发。 不重新设计、不扩展架构、不提供第二个模板、不做A/C拆分、不提供电商变体、不设模式标记。所有这些都曾被考虑并否决。添加此类内容的提议属于产品决策,而非会话决策。
  • ⚠️ 版本标记曾在否决列表中,但现已取消。 产品负责人于2026-08-24推翻了该决定,本条款记录了此变更,模板现在包含
    Account.template-version
    字段。⛔ 使用前请阅读references/changing-the-base.md §1中的三个条款:它们将版本标记排除在配置决策之外。⛔ 此变更不构成上述列表中其他事项的先例。
  • 本技能绝不修改任何学员的知识库规则,也绝不提议添加
    type:
    字段来为自己的说明腾出空间。这是知识库所有者的事务,需使用他们自己的知识库工具完成。
  • 本技能绝不编辑模板Base本身,仅编辑学员的副本。读取模板是允许的,第0关的第三次检查正是如此;⛔ 写入模板是
    changing-the-base.md §0
    专门禁止的行为。
  • 复制操作必须使用学员的凭证,否则不执行。 已确定:由会话执行复制操作,而非让学员点击;且绝不使用所有者的身份。任何提议分发所有者凭证(无论何种包装)的想法都不属于会话决策,也不属于产品决策。
  • 安装本身就是交付成果,知识库说明是确保成果持续可用的关键。 配置完美但无说明的Base是学员无法解释的系统,下周的课程只能通过询问重新发现它。