DEV Community

life
life

Posted on

A review pipeline needs an action log, not a policy page

Review operations usually live in three places at once, an email tool that asks, a dashboard that filters, and a person who knows which. The Federal Trade Commission's Guides in 16 CFR part 255 describe the activity in a way that does not fit any of those three, because the paragraph about reviews is written as a list of verbs rather than as a rule about content.

255.2(d) is one long list of things an advertiser can do to a review. The verbs, in the order the rule gives them, are procure, suppress, boost and organize, then publish, upvote, downvote, report and edit. What the paragraph forbids is an outcome rather than a click, and it ends by closing off the escape route that the verbs only matter once a review counts as an endorsement.

The verbs belong in a table

create table review_action (
  action_id    text primary key,
  sku          text not null,
  actor        text not null,                      -- human or automation id
  op           text not null check (op in
                 ('procure','suppress','boost','organize','publish',
                  'upvote','downvote','report','edit')),
  audience     text,                               -- who was selected or reached
  selection_rule text,                             -- the filter, as written
  acted_at     timestamptz not null default now()
);
Enter fullscreen mode Exit fullscreen mode

selection_rule is the column that decides whether an operation is defensible. A request sent to every buyer after delivery and a request sent only to buyers who rated above four stars are both procure, and the difference between them is entirely in how the audience was chosen. Storing the filter as text at the time it runs is the only version of this that survives a conversation months later, because the tool that ran it will have been reconfigured twice by then.

The other thing worth recording is whether the row was produced by a person or by a scheduled job, since actor is the field that tells you whether the rule was applied or merely intended.

A free unit is a shipment with a consequence

255.5(a) is the disclosure rule. Where a link between the person endorsing and the seller would change how much weight the audience should give that endorsement, and the audience would not expect the link anyway, it has to be disclosed clearly and conspicuously. Money is one. Free or discounted stock is another, including stock that has nothing to do with the item being endorsed, and it stays a connection whether or not the seller asked for a review in exchange. The softer ties count too, an early copy before launch, a shot at payment, a shot at a prize, a slot in promotional material.

create table material_connection (
  connection_id text primary key,
  recipient     text not null,
  kind          text not null check (kind in
                  ('free_unit','discounted_unit','early_access','payment',
                   'prize_entry','media_placement','relationship')),
  requires_endorsement boolean not null default false,
  disclosed_on   text,                             -- surface where the disclosure rendered
  linked_shipment text                             -- the outbound record, if any
);
Enter fullscreen mode Exit fullscreen mode

Two fields carry the legal weight and neither is about intent. requires_endorsement exists because the rule reaches gifts with no strings, so a false there does not close the row. linked_shipment exists because a free unit leaves a building before anyone writes a campaign brief, and the outbound record is the earliest honest place to notice that a connection now exists.

The test in the same paragraph is about an audience rather than a contract. Disclosure is owed once a significant minority of the people who see the message would not understand or expect the connection. That is a fact about where the message ran, which is why disclosed_on should name a surface and not a date.

Claims age, and reviews do not stop being quoted

255.1(c) provides that an ad which credits a reviewer's product use is claiming the reviewer really used it, so the use had to be genuine when the words were given, and the ad may keep running only while the advertiser has good reason to think that remains the case. 255.1(b) applies the same shape to expert and celebrity endorsements, allowing continued use only while there is good reason to believe the endorser still subscribes to the views presented, with reasonableness judged partly by material alterations to the product.

create table claim_asset (
  asset_id       text primary key,
  quote_source   text not null,                    -- review id, creator id, lab
  captured_at    timestamptz not null,
  product_rev    text not null,                    -- revision the claim was true of
  recheck_after  date,
  substantiation_ref text                          -- evidence behind a performance claim
);
Enter fullscreen mode Exit fullscreen mode

product_rev is the field that catches most stale quotes, since a review attached to a previous revision is a claim about a thing that no longer ships. recheck_after turns the good-reason standard into a job rather than a judgment call.

substantiation_ref deserves its own note. 255.2(a) treats a consumer claim about performance as saying the item works as shown, requires the advertiser to possess and rely on adequate substantiation just as for a direct claim, and says outright that quoted shoppers are not scientific evidence on their own. A pointer to other reviews is a pointer to the same missing evidence, restated.

What the log is for

255.1(d) puts the risk on the advertiser. A statement carried by an endorser that misleads or that lacks substantiation becomes the advertiser's problem, as does a material connection nobody disclosed, and the paragraph says liability can attach even where the endorser escapes it. It then asks advertisers to put guidance in front of endorsers, to keep watching what those statements do once published, and to act hard enough to fix a problem and stop it coming back, while stating in the same paragraph that none of that is a safe harbor.

A log is what monitoring means in practice, and a remediation is a row with a follow-up action attached to it. Neither is a policy document.

This is a model of what the published Guides ask a system to be able to show, not a judgment about any specific campaign. FulfillNexa by SBT (fulfillnexa.com) keeps brand inventory on the Suzhou floor of 13,000 square meters, at Dongguan on 8,000 and at Shenzhen on 3,000, all of it in China, and we cannot see which of those units a brand sends out for free. What we can see is the outbound line, and if a disclosure duty starts at the moment a box leaves for someone who did not buy it, that is the earliest moment anyone in the chain can record it.

Top comments (0)