PolaronPartially Implemented
Teams, reporting lines, and who knows what
Polaron models how your organization works: teams, who reports to whom, the positions people hold, and what each person knows. Other products can grant access to a team instead of listing people one by one.Polaron · src/org.rs
use polaron::graph::{self, AddReportingEdgeInput};
use polaron::org::{self, CreateOrgInput};
use polaron::teams::{self, AddMemberInput, CreateTeamInput};
let acme = org::create(CreateOrgInput { name: "Acme".into() }, &valence).await?;
let team = |name: &str| CreateTeamInput {
org_id: acme.id.clone(),
name: name.into(),
description: None,
parent_id: None,
responsibilities: vec![],
};
let platform = teams::create(team("Platform"), &valence).await?;
let infra = teams::create(team("Infra"), &valence).await?;
// Infra reports to Platform. A reverse edge is rejected as a cycle.
graph::add_reporting_edge(
AddReportingEdgeInput {
child_team_id: infra.id.clone(),
parent_team_id: platform.id.clone(),
},
&valence,
)
.await?;
teams::add_member(
AddMemberInput {
team_id: infra.id.clone(),
user_id: "alice".into(),
seat_kind: None,
position_id: None,
},
&valence,
)
.await?;Release status
Polaron works end to end in its own product tests, but it isn't in the public templates or on this site yet. Magnon builds on its teams.Orgs and teams
Implemented
Create, archive and restore orgs and teams, with history.
Team-based access
Implemented
Every team mirrors a Gauge group, so you can share with a team. TeamMemberPolicy gates another product's rows on membership.
Reporting and collaboration graph
Implemented
One active parent per team, with cycles rejected on save, plus collaboration links between teams.
Positions catalog
Implemented
Define positions for an org and assign them to team members.
Expert profiles
Implemented
Record topics, years of practice and accomplishments. Tenure and rank bands come from that history and from peer disputes.
Sharing and history
Implemented
Share orgs and teams with people, groups or other teams, and see who changed what.
Notifications and events
Implemented
Notify people about claims, and publish a Photon event when a team is archived.
Public release
In Progress
Polaron isn't mounted in a template or on this host yet.
Code sample
Taken from the getting-started docs. See all code samples on Resources.
Polaron teamsPolaron
An org, two teams, a reporting line, and a member
use polaron::graph::{self, AddReportingEdgeInput};
use polaron::org::{self, CreateOrgInput};
use polaron::teams::{self, AddMemberInput, CreateTeamInput};
let acme = org::create(CreateOrgInput { name: "Acme".into() }, &valence).await?;
let team = |name: &str| CreateTeamInput {
org_id: acme.id.clone(),
name: name.into(),
description: None,
parent_id: None,
responsibilities: vec![],
};
let platform = teams::create(team("Platform"), &valence).await?;
let infra = teams::create(team("Infra"), &valence).await?;
// Infra reports to Platform. A reverse edge is rejected as a cycle.
graph::add_reporting_edge(
AddReportingEdgeInput {
child_team_id: infra.id.clone(),
parent_team_id: platform.id.clone(),
},
&valence,
)
.await?;
teams::add_member(
AddMemberInput {
team_id: infra.id.clone(),
user_id: "alice".into(),
seat_kind: None,
position_id: None,
},
&valence,
)
.await?;