kind: signal_catalog
schema_version: 2
owner: sales

# What each company signal means and how it changes content.
#
#   audience = vertical + persona + size_band(1+) + location_footprint
#              + systems_of_record(1+) + signal_predicate(0-4, qualifying|gating)
#
# This file owns interpretation. How a state is set lives in
# `signal-detection.yaml`, joined on `signal_id`. This file mints the IDs.
#
# `id` is immutable after publication. `tag` is the vocabulary tagging
# processes write and audience YAML configurations read. Every signal resolves to a
# `signal_state` value.
#
# `implies_problems` links a signal to canonical problem records it makes more
# likely. The link is a hypothesis, not a claim about an account, and a starting
# set only. Problems carry no vertical scope, so whether one applies is decided
# by the audience binding that selects it into `problem_ids`, tested against the
# problem's own `situation`. An empty list means reviewed and none found.
#
# Only `qualifying` and `gating` signals belong in an audience predicate.
# `contextual` signals resolve at the call card layer, per account. Signals
# that mirror a persona (SG_004, SG_010, SG_011, SG_020) belong in the
# vertical's persona binding; only their cross-role absences earn a slot in a
# predicate.
#
# The list is ordered by importance for audience definition, not by ID.

value_domain: signal_state

signals:
  - id: SG_001
    tag: family_owned
    name: 'Family owned or family controlled'
    polarity: gating
    question: 'Is the company family owned or family controlled?'
    derived_from:
      - SG_002
      - SG_003
    inference: >-
      A family owner spends their own money and carries the change personally,
      so incremental improvement does not clear the bar. The upside has to be
      roughly five times the cost before they will act.
    audience_use: >-
      Do not place a family-owned account in an audience whose problem set only
      promises efficiency. Route it to audiences whose proof shows step-change
      outcomes, and lead with the owner's own risk rather than department cost.
    implies_problems: []
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_024
    tag: privately_owned
    name: 'Privately owned rather than publicly traded'
    polarity: gating
    question: 'Is the company privately owned rather than publicly traded?'
    inference: >-
      A private company owes no external reporting to anyone but its lender and
      its owners, so a systems decision is judged against its own payback rather
      than against how it will read to the market. It also means the operating
      record is never forced into an audited external format, so it can stay
      inconsistent for years without any outside party noticing.
    audience_use: >-
      Gates the private-company framing: internal payback, owner or sponsor
      authority, and no external reporting deadline. When absent, do not use that
      framing at all, because a public filer's problem set starts from external
      reporting and audit and this library does not cover it. SG_001 and SG_021
      are the two common ways this signal is true; neither is required for it.
    implies_problems: []
    confidence: high
    origin: founder_instinct
    status: draft

  - id: SG_025
    tag: company_age_over_3_years
    name: 'Operating for more than three years'
    polarity: gating
    question: 'Was the company founded more than three years ago?'
    inference: >-
      Three years is roughly how long it takes for an operating record to grow
      past what a spreadsheet and one person's memory can hold. Past that point
      the company already runs on a system of record it has outgrown, with
      process built around that system's limits, so there is something to
      displace. Under three years there is no accumulated record and no legacy to
      migrate, which is a different motion entirely.
    audience_use: >-
      Gates every audience whose problem set assumes accumulated operating debt
      or a system of record to displace. When absent, treat the account as
      greenfield and out of scope for this library rather than as a weaker fit.
      SG_019 present while this signal is absent is a data conflict worth
      rechecking, not a basis for inferring either state.
    implies_problems: []
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_022
    tag: operates_multiple_locations
    name: 'Operates more than one site'
    polarity: qualifying
    question: 'Does the company operate more than one physical location?'
    inference: >-
      Operating more than one site means results are managed per location while
      the general ledger usually stays single. Cost per unit is then bundled at
      the company level, so nobody can state which site or line actually makes
      money. A single-site company has no such split and does not need per-site
      profit and loss, so the same problem statement reads as invented.
    audience_use: >-
      Qualifies the account for audiences whose problem is cost visibility per
      site or per unit. Read the count from `location_footprint` to size the
      impact, and never use this framing against a single-site account.
    implies_problems:
      - P_00002
    confidence: high
    origin: founder_instinct
    status: draft

  - id: SG_021
    tag: pe_backed
    name: 'Private equity or financial sponsor backed'
    polarity: qualifying
    question: 'Does a private equity firm or financial sponsor hold ownership?'
    inference: >-
      A sponsor sets a reporting cadence and a return horizon the operating team
      did not choose. Systems decisions are then judged against the hold period
      rather than against payback in isolation, which shortens the time a buyer
      is willing to wait for a result.
    audience_use: >-
      Confirms directly what SG_006, SG_007, and SG_008 only infer. When
      present, prefer audiences whose proof shows reporting speed and
      auditability. When absent alongside a short chief executive tenure, treat
      sponsor ownership as a hypothesis to confirm on the call.
    implies_problems: []
    confidence: high
    origin: founder_instinct
    status: draft

  - id: SG_004
    tag: has_cfo
    name: 'Chief financial officer in seat'
    polarity: qualifying
    question: 'Does the company employ a chief financial officer?'
    inference: >-
      A dedicated finance officer means the company has outgrown owner-run
      finance and now reports on numbers it has to defend.
    audience_use: >-
      Persona precondition for P2 rather than a predicate term. Its absence is
      the informative case, because finance work then sits with the chief
      executive or an outside accountant.
    implies_problems: []
    confidence: high
    origin: founder_instinct
    status: draft

  - id: SG_005
    tag: has_cfo_and_controller
    name: 'Chief financial officer and controller both in seat'
    polarity: qualifying
    question: 'Does the company employ both a chief financial officer and a controller?'
    derived_from:
      - SG_004
    inference: >-
      Splitting the finance function into strategy and control is a structural
      decision companies only make once transaction volume and audit exposure
      justify two salaries. It is the strongest available proxy for real size.
    audience_use: >-
      Treat as a size confirmation stronger than headcount. It also identifies
      the controller as the technical evaluator while the chief financial
      officer stays the economic buyer.
    implies_problems: []
    confidence: high
    origin: founder_instinct
    status: draft

  - id: SG_016
    tag: erp_named_in_job_posts
    name: 'A specific ERP or accounting system is named in job posts'
    polarity: qualifying
    question: >-
      Do the company's job postings name a specific enterprise resource planning
      or accounting system?
    inference: >-
      Naming a system in a hiring requirement identifies at least one system
      participating in the operating record and shows the company is staffing
      around its limits rather than replacing it. Other systems may coexist.
      Silence across all postings suggests spreadsheets may hold the process.
    audience_use: >-
      Detection gate for the `systems_of_record` dimension, which is what
      actually separates displacement audiences from greenfield ones. Record
      every uniquely identified controlled system in canonical catalog order.
      Until any system identity is established as a pre-call fact, use
      `[unknown]` rather than guessing.
    implies_problems: []
    confidence: medium
    origin: ai_inferred
    status: draft

  - id: SG_006
    tag: ceo_tenure_under_6_months
    name: 'Chief executive in seat under six months'
    polarity: qualifying
    question: 'Did the current chief executive start less than six months ago?'
    inference: >-
      An outside chief executive arriving at a previously owner-run company
      usually means the owner sold, most often to a sponsor, and the new leader
      has a mandate to change the operating model.
    audience_use: >-
      Opens a window where systems decisions are expected rather than resisted.
      Route to audiences whose problems are framed as inherited operating debt,
      and use proof that shows a first-year change landing. Confirm the
      ownership inference against SG_021 before asserting it.
    implies_problems: []
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_007
    tag: cfo_tenure_under_6_months
    name: 'Chief financial officer in seat under six months'
    polarity: qualifying
    question: 'Did the current chief financial officer start less than six months ago?'
    inference: >-
      A new finance officer is either a sponsor requirement or a response to
      numbers nobody could explain. Either way the new officer is actively
      looking for what the previous regime hid.
    audience_use: >-
      Route to audiences whose problems are visibility and traceability of
      financial data. The buyer wants to find the truth, not to save hours.
    implies_problems:
      - P_00002
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_008
    tag: cso_tenure_under_6_months
    name: 'Chief sales officer in seat under six months'
    polarity: qualifying
    question: 'Did the current chief sales officer start less than six months ago?'
    inference: >-
      Companies replace sales leadership after missed quarters, so a new sales
      officer is under pressure to show improvement quickly.
    audience_use: >-
      Route to audiences whose problems are pipeline and quoting speed. The
      buying window is short and the proof has to show near-term movement.
    implies_problems: []
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_018
    tag: ma_event_last_18_months
    name: 'Acquisition or merger within eighteen months'
    polarity: qualifying
    question: >-
      Has the company acquired, merged with, or been acquired by another company
      in the last eighteen months?
    inference: >-
      A completed transaction leaves two of everything and a mandate to
      consolidate, which creates both the requirement and the budget inside a
      known window.
    audience_use: >-
      Route to audiences whose problems are consolidation and reconciliation
      across duplicate systems. Pair with SG_006 and SG_007, which frequently
      appear alongside it and identify who owns the mandate.
    implies_problems:
      - P_00002
    confidence: medium
    origin: ai_inferred
    status: draft

  - id: SG_023
    tag: new_facility_last_12_months
    name: 'Opened a new facility within twelve months'
    polarity: qualifying
    question: 'Has the company opened a new plant, warehouse, or office in the last twelve months?'
    inference: >-
      Opening a site commits capital ahead of revenue and adds one more location
      to every process that was already strained at the previous count. The
      months right after opening are when gaps in per-site reporting become
      visible to leadership, because the new site's numbers cannot be compared
      to the others.
    audience_use: >-
      A timing signal rather than a fit signal. It justifies calling now. Pair
      it with SG_022, whose problem it makes urgent, and reference the opening
      directly in the opener.
    implies_problems:
      - P_00002
    confidence: medium
    origin: ai_inferred
    status: draft

  - id: SG_017
    tag: hiring_back_office_clerks
    name: 'Actively hiring back office clerical roles'
    polarity: qualifying
    question: >-
      Is the company currently hiring order entry, accounts payable, or other
      clerical back office roles?
    inference: >-
      An open clerical requisition is a company deciding to buy more manual
      capacity, which puts a current price on the work and proves the volume is
      growing faster than the process can absorb.
    audience_use: >-
      The strongest onshore counterpart to SG_013. Route to audiences whose
      problem is manual throughput, and size the impact against the posted
      salary rather than against an estimated hourly rate.
    implies_problems:
      - P_00002
    confidence: medium
    origin: ai_inferred
    status: draft

  - id: SG_013
    tag: has_india_headcount
    name: 'One or more employees in India'
    polarity: qualifying
    question: 'Does the company have one or more employees located in India?'
    inference: >-
      Offshore administrative headcount means the company chose to make manual
      data entry cheaper instead of removing it, so the volume of manual work is
      already known and already budgeted.
    audience_use: >-
      Strong fit for audiences whose problem is manual data entry volume. The
      spend is visible and the comparison is direct, so proof should be measured
      against the cost of the offshore team rather than against doing nothing.
    implies_problems:
      - P_00002
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_009
    tag: has_internal_it
    name: 'At least one internal IT employee'
    polarity: qualifying
    question: 'Does the company employ at least one internal IT person?'
    inference: >-
      Whoever holds internal IT carries reliability for the whole company, which
      makes them the person who feels every broken integration and manual
      workaround first.
    audience_use: >-
      Required for audiences whose solutions assume someone inside can own
      configuration and access. Its absence means the audience must promise a
      hands-off implementation.
    implies_problems: []
    confidence: high
    origin: founder_instinct
    status: draft

  - id: SG_019
    tag: long_median_employee_tenure
    name: 'Median employee tenure over seven years'
    polarity: gating
    question: 'Is the median tenure of current employees longer than seven years?'
    inference: >-
      Long tenure means the process lives in people rather than in systems. The
      knowledge is real and valuable, and the same people are the ones a change
      threatens, so change resistance and key-person risk arrive together.
    audience_use: >-
      Gates audiences that assume appetite for process change. When present, use
      problems framed as key-person risk and continuity, and proof that shows
      existing staff kept their judgment rather than being replaced by the tool.
    implies_problems: []
    confidence: low
    origin: ai_inferred
    status: draft

  - id: SG_020
    tag: has_operations_leader
    name: 'Operations leader in seat'
    polarity: qualifying
    question: >-
      Does the company employ a chief operating officer or a vice president of
      operations?
    inference: >-
      An operations leader is the only role that owns work crossing department
      boundaries, which is where handoff problems live and where nobody else has
      authority to act.
    audience_use: >-
      Persona precondition for P3 rather than a predicate term. Without this
      role, cross-department problems have no owner and the audience should
      either name a different champion or be treated as unqualified.
    implies_problems: []
    confidence: medium
    origin: ai_inferred
    status: draft

  - id: SG_010
    tag: has_cto
    name: 'Chief technology officer in seat'
    polarity: qualifying
    question: 'Does the company employ a chief technology officer?'
    inference: >-
      A technology officer at this size indicates the company already treats
      software as something it builds or shapes, not only something it buys.
    audience_use: >-
      Persona precondition for P6. Expect build-versus-buy resistance, so the
      audience needs proof about extensibility rather than only outcomes. The
      informative predicate term is its absence beside a finance persona.
    implies_problems:
      - P_00001
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_011
    tag: has_vp_sales
    name: 'Vice president of sales in seat'
    polarity: qualifying
    question: 'Does the company employ a vice president of sales?'
    inference: >-
      A named sales leader means revenue is managed as a function with targets
      and a process, so commercial workflow problems have a real owner.
    audience_use: >-
      Persona precondition for P4. Without it the commercial problem set has no
      owner and the audience should not be used.
    implies_problems: []
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_002
    tag: surname_cluster_present
    name: 'Multiple employees share a last name'
    polarity: contextual
    question: 'Do two or more employees share the same last name?'
    inference: >-
      Shared surnames across the employee list indicate family participation in
      the business, which is the cheapest available proxy for family ownership.
    audience_use: >-
      Input to SG_001 only. On its own it must not change audience membership,
      because common surnames produce false positives at scale.
    implies_problems: []
    confidence: low
    origin: founder_instinct
    status: draft

  - id: SG_003
    tag: eponymous_company_name
    name: 'Company name matches a leader name'
    polarity: contextual
    question: 'Does the company name contain the name of a current leader or founder?'
    inference: >-
      A company carrying its leader's name usually still answers to that person,
      so identity and reputation are attached to the operating decision.
    audience_use: >-
      Input to SG_001. It also tells the writer that the named leader reads
      reputational risk as personal risk, which changes the framing.
    implies_problems: []
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_012
    tag: has_marketing_function
    name: 'Marketing department present'
    polarity: contextual
    question: 'Does the company employ one or more dedicated marketing people?'
    inference: >-
      A marketing function means the company invests in being found online, so
      it accepts that its market forms opinions before contact.
    audience_use: >-
      Card layer only. Predicts that the account will respond to outbound that
      references its own published material.
    implies_problems: []
    confidence: medium
    origin: founder_instinct
    status: draft

  - id: SG_014
    tag: appears_in_pr_wire
    name: 'Appears in a press release wire'
    polarity: contextual
    question: 'Has the company appeared on a press release wire?'
    inference: >-
      Paying to distribute news means the company is talking to an audience
      beyond its customers, which usually means it has raised capital or intends
      to raise it.
    audience_use: >-
      Card layer only. Cite the release content in the opener, and read the
      release itself for SG_018, SG_021, and SG_023, which it often reports.
    implies_problems: []
    confidence: low
    origin: founder_instinct
    status: draft

  - id: SG_015
    tag: modern_website
    name: 'Website looks current and maintained'
    polarity: contextual
    question: 'Does the company have a current, well maintained website?'
    inference: >-
      A company that keeps its public face current is willing to spend on
      appearance and change, which correlates with willingness to adopt new
      tools.
    audience_use: >-
      Card layer only. A dated site does not disqualify an account, but it moves
      the opener toward low disruption rather than innovation.
    implies_problems: []
    confidence: low
    origin: founder_instinct
    status: draft
