Skip to content

Enforce one active skill-name namespace per project #40

Description

@jon-devlapaz

Problem

Tink validates duplicate names only within a single skillset manifest. It does not prevent a project from activating the same skill name through:

  • two different skillsets;
  • a standalone skill followed by a skillset member;
  • a skillset member followed by a standalone skill.

The library audit found 525 of 527 grouped member names also present as flat library entries, plus a real cross-creator agents-sdk collision. Library coexistence is safe because $TINK_HOME is not the runtime namespace; project coexistence is ambiguous.

Relevant seams:

  • src/skillsets.rs: validate_members, add, and refresh
  • src/add.rs: standalone skill add
  • src/check.rs: project validation

Proposed change

Introduce a single ActiveSkillIndex / ProjectInventory mapping each active skill name to its owner:

  • standalone path; or
  • skillset root and member path.

Use it before skill add, skillset add, and skillset refresh. Have skill check report conflicts already present in manually constructed or legacy trees. Refresh must exclude the set being replaced from its own preflight.

Conflict errors should name both owners and fail before depositing into the library or mutating the project.

Acceptance

  • Add set A containing alpha, then set B containing alpha: second add fails without mutation.
  • Add flat alpha, then a set containing alpha: set add fails without mutation.
  • Add a set containing alpha, then flat alpha: flat add fails before library deposit.
  • A manually constructed conflicting project causes tink skill check to fail with both owners.
  • Non-conflicting standalone skills and skillsets continue to coexist.

Priority

P0 — namespace integrity.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingskillset-auditFindings from the 2026-08-09 skillset library audit

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions