person_profile ยท diff

git:20260915.5e28404 to git:20261020.49a1c46

10 added, 0 removed. Audit A to A.

---
name: person_profile
description: Generate individual profiles from an existing person roster, LinkedIn enrichment and dataset evidence, including founder-trait assessment for active founders. Use for selected people or the complete roster.
---
# Person profile
Generate standard individual profiles for use directly or by other skills.
## Inputs and outputs
The async API accepts `dataset_name`, optional `names` (a string or list),
and keyword-only `include_dataset_context=True`. Omitted names select everyone
in the roster. `person_profile` returns `list[InsightFile]`; the
`person_profile_as_person_objects` adapter runs the same workflow and returns
populated `list[Person]`.
Explicit unmatched names currently create sparse `Person` inputs for profiling;
they do not change the roster. The roster remains required even for these calls.
## Workflow and dependencies
Read the existing roster, resolve LinkedIn profiles and synchronize the dataset
before selecting reusable individual profiles. On a cache miss, combine the
resolved LinkedIn payload with `build_person_dossier` evidence when
`include_dataset_context` is enabled, then synthesize the profile.
+ The shared gatherer scans current parsed sources for full-word, ordered name
+ combinations unique within the existing roster, or exact email/LinkedIn matches.
+ Combinations require two words and eight letters; exact full names are exempt
+ from the length requirement but still checked for ambiguity. The threshold lives
+ in `config/people/dossier.json`. No discovery or NER call is needed.
+ Personal documents are included once (up to the existing 20,000-character limit);
+ other matches remain distinct chunks, excluding passages already in full documents.
+ The profile prompt resolves attribution and ignores uncertain or unrelated evidence.
+ The roster and retrieval settings participate in profile freshness, so new name
+ collisions invalidate generated profiles; manual profiles retain precedence.
Biographical and founder-trait instructions always belong to the standard prompt.
Apply the trait assessment only to explicitly identified active founders; keep
other people factual. [Shared profile standards](../standards_and_architecture/SKILL.md#standard-person-profiles)
own identifiers, filenames, manual precedence and compatibility between consumers.
Direct calls never discover people. Run [persons_in_dataset](../persons_in_dataset/SKILL.md)
first when the roster is missing; bulk refresh declares that dependency.
## Side effects and failure behavior
LinkedIn resolution can fetch profiles and update stored JSON and registry state.
Resolution and synchronization occur even before a manual or reusable profile
is selected. Expected LinkedIn/Apify acquisition failures are logged; profiling
continues with successful enrichment and available dataset evidence. Newly generated
profiles with unresolved LinkedIn retrieval carry a Markdown INCOMPLETE notice.
The notice does not change reuse rules or manual precedence. Unexpected errors
and synchronization failures still raise. Generation settings affect freshness metadata, not filenames.
A missing or invalid roster raises. An empty roster with no explicit names
returns `[]`. With no dossier, mentions or LinkedIn payload, generation saves a
profile with a no-information note. Individual generation failures are collected:
successful files remain, but the API raises instead of returning a partial list.
## Usage
The harness requires a person; the direct CLI also supports the complete roster.
```bash
conda run -n sictic-env python -m skills.harness /person_profile "<DATASET>" "<NAME>"
conda run -n sictic-env python -m skills.person_profile --dataset "<DATASET>"
conda run -n sictic-env python -m skills.person_profile --dataset "<DATASET>" --persons "<NAME_1>, <NAME_2>"
```
The direct CLI retains `--person` as an alias for `--persons`.
## References
- [Implementation and adapter](person_profile.py)
- [Profile prompts and query](../../config/person_profile/)
- [LinkedIn resolution contract](../standards_and_architecture/SKILL.md#linkedin-retrieval-and-persistence)