So far the MCP server only offers a single tool, but authentication
and integration is already built in a way that's intended to last.
Ideally extensions to this happen by adding additional tools or resources,
but will not require further architectural changes, though realistically we'll
probably identify more potential for reuse, once we added a few more tools.
The exact representation of results is still slightly to-be-discussed. Right
now we are using vanilla APIv3 representation, which might be enough, but possibly
we want to represent linked resources differently, so that they can be recognized
to be fetchable via MCP resources more easily.
The OpenTelemetry and Appsignal helpers were already able to
be hooked into logging, but didn't offer public methods to plainly
trace the occurence of an exception. For both helpers this was possible
to be extracted directly from the existing code.
We even had a spec testing behaviour of a string that needed
escaping, but due to the fact that we constructed the relatively large
header content in the spec, we never noticed that escaping was indeed
missing in that case.
This one is defined as optional by RFC 6750, which defines
the usage of bearer tokens. It allows a client to know, which
scopes are required to access a given resource when using Bearer tokens.
https://community.openproject.org/wp/67642
Attachments::ExtractFulltextJob is run twice:
- one time on creation
- one time when the direct upload is completed
When it runs on creation, and the attachments are stored on S3, the
attachment is in 'prepared' status and is not complete yet.
Due to a bug in carrierwave which is fixed since June 2023 (see
https://github.com/carrierwaveuploader/carrierwave/issues/2524), the
`#local_file` method raises the error "NoMethodError: undefined method
'body' for nil:NilClass". There is a separate issue for upgrading this
dependency one day: https://community.openproject.org/wp/67626.
The fix is to call `#local_file` only if the attachment is readable.
Additionnally:
- error handling has been updated to raise the error instead of
swallowing it silently, so well have proper reporting in AppSignal
next time.
- when a custom S3 endpoint is used (for local testing with minio for
instance), this custom endpoint is added to the CSP.
Co-authored-by: Jan Sandbrink <j.sandbrink@openproject.com>
- Use constants for semantic names. As a bonus it gives documentation
about the metric.
- Use a random UUID for the service name. It has to be unique for a
given service name and namespace.
- Use process type as service name.
- Add service version.
Do not set anything regarding the environment (edge / stage / prod) or
shard name as these will be available as k8s labels anyway.
Favorite is the correct term in the context of expressing a preference
for a particular project / other OpenProject domain object.
Updates `ActsAsFavorable` to `ActsAsFavoritable`, as well as filenames,
identifiers and strings to:
favored => favorited
favorable => favoritable
favoring => favoriting
It's now called external and can only switch between external and non-external links.
This does not only affect the link target, but additionally also adds a trailing visual icon
as it is suggested by our Lookbook.
Since this made me go through all calls of link_translate, I took the opportunity to also replace
occurences of manual calls to OpenProject::Static::Links with the new abbreviated call syntax.