{% extends "base.html" %} {% block title %}{{ repo.name }} · Repositories · Keywright{% endblock %} {% block body %}

Work · Repository

{{ repo.name }}{{ ' · Archived' if repo.archived }}

{% if repo.web_url %}Open repository{% endif %}

{{ repo.description }}

{% if repo.provider_id %}

GitHub synchronization

{{ repo.source_metadata.full_name }} · {{ repo.source_metadata.visibility }}{{ ' · Archived on GitHub' if repo.source_metadata.archived }}{{ ' · Disabled on GitHub' if repo.source_metadata.disabled }}

{% if sync %}

{{ 'paused' if sync_paused else sync.status }} · Last successful sync: {{ sync.last_success or 'Never' }} · {{ sync.imported }} imported / {{ sync.updated }} updated this run

{% if sync.error %}

{{ sync.error }}

{% endif %}

Next eligible attempt: {{ sync.next_attempt }}. Disabled connections and archived projects pause imports.

{% endif %}
Import settings

Default: five minutes, plus daily full reconciliation. Source changes preserve local workflow and task placement.

Manage GitHub connections
{% else %}

Manually registered · Connect GitHub and attach this repository from the picker to preserve its locations.

{% endif %}
Edit repository

Changing the project transfers repository and environment context to agents with read access to that project's board. Host permissions remain separately enforced.

Environment locations

Saving records metadata only. Verify runs a read-only directory and Git check through the selected SSH connection. It requires a pinned host key and Python 3 on the host.

{% for environment in ['dev','test','prod'] if not args.environment or environment == args.environment %}

{{ environment|upper }}

{% for loc in locations.locations if loc.environment == environment %}
{{ loc.name }}{{ ' · Primary' if loc.is_primary }}{{ loc.verification_status }}

{{ loc.asset_name or ('Unavailable inventory host' if loc.asset_ref else '') }}{{ ' · ' if loc.asset_ref }}{{ loc.resource_name or ('Unavailable SSH resource' if loc.resource_ref else 'Inventory only') }}

{{ loc.directory }}{% if loc.subdirectory %} / {{ loc.subdirectory }}{% endif %}

{{ 'Checkout' if loc.directory_kind == 'checkout' else 'Deployment directory' }}{% if loc.expected_ref %} · Expected: {{ loc.expected_ref }}{% endif %}

{% if loc.observed %}

Observed: {{ loc.observed.get('repository', '') }} {{ loc.observed.get('ref', '') }} {{ loc.observed.get('commit', '') }}

{% endif %}{% if loc.verified_at %}

Last check: {{ loc.verified_at }}

{% endif %}{% if loc.verification_message %}

{{ loc.verification_message }}

{% endif %}{% if not loc.available %}

Host or inventory association is unavailable. Edit the location to choose a valid connection.

{% endif %}{% if loc.application_url %}Open application{% endif %}

{{ loc.notes }}

Edit location{% if loc.can_verify %}
{% else %}Verification needs an available SSH connection with a pinned host key.{% endif %}
{% else %}

{{ 'No locations on this page' if args.offset or locations.next_offset else 'Not configured' }}

{% endfor %}
{% endfor %}

{{ 'Edit' if edit else 'Add' }} location

{% if edit %}{% endif %}

Choose at least one host reference. If both are selected, they must be linked in Inventory. Selectors show up to 500 records.

{% if edit %}Cancel edit{% endif %}
{% endblock %}